「clang++」の版間の差分
行10: | 行10: | ||
== インストール == | == インストール == | ||
− | + | === Ubuntu/Debian系 === | |
+ | clangを指定すると3.4がインストールされます。時期によって変更されるかもしれませんので、apt search などの結果をよく確認してください。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo apt install clang | ||
+ | </syntaxhighlight> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo apt install clang-3.5 | ||
+ | </syntaxhighlight> | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | sudo apt install clang-3.4 | ||
+ | </syntaxhighlight> | ||
{{ports|/usr/ports/lang/clang34|clang34}} | {{ports|/usr/ports/lang/clang34|clang34}} | ||
− | + | === MacOS === | |
+ | Xcode から入れる場合には、以下の通りです。 | ||
+ | * Xcode を更新します。 | ||
+ | * Xcodeの Preferences の Downloads の Command Line Tools のインストールをクリックします。 | ||
== FreeBSDへのインストール == | == FreeBSDへのインストール == | ||
FreeBSDでは、pkgコマンド、または、portsコレクションを使用してインストールできます。ベースシステムのコンパイラのコマンドは、/usr/binにありますが、pkg/portsでインストールしたコンパイラのコマンドやライブラリは、/usr/local に入ります。 | FreeBSDでは、pkgコマンド、または、portsコレクションを使用してインストールできます。ベースシステムのコンパイラのコマンドは、/usr/binにありますが、pkg/portsでインストールしたコンパイラのコマンドやライブラリは、/usr/local に入ります。 | ||
行53: | 行66: | ||
sudo pkg install clang32 | sudo pkg install clang32 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== Ubuntu == | == Ubuntu == | ||
apt/apt-cache でインストールできるパッケージが調べられます。 | apt/apt-cache でインストールできるパッケージが調べられます。 |
2015年2月22日 (日) 15:40時点における版
clang++ とは、clangのC++コンパイラです。一部の環境では、c++コマンドの実体は、clang++コマンドです。c++コマンドについては、「c++」をご参照ください。
読み方
- clang++
- くらんぐ ぷらす ぷらす、くらんぐ ぷらぷら
概要
FreeBSD 10.0-RELEASE以前のFreeBSD の場合、デフォルトで C++ コンパイラとして g++ がインストールされていました。FreeBSD の g++ コマンドと c++ コマンドは、同じものでした。FreeBSD 10.0-RELEASEからは、デフォルトのコンパイラがclang/clang++に変更されています。 FreeBSD は、標準でコンパイラが付属していますが、 ports コレクションを利用して clang (clang++が含まれます)をインストールすることで、システム標準のコンパイラよりも新しいコンパイラを導入できます。
インストール
Ubuntu/Debian系
clangを指定すると3.4がインストールされます。時期によって変更されるかもしれませんので、apt search などの結果をよく確認してください。
sudo apt install clang
sudo apt install clang-3.5
sudo apt install clang-3.4
FreeBSDにインストールする場合
ports コレクションからインストールする場合
cd /usr/ports/lang/clang34 sudo make install clean
pkgコマンドでインストールする場合
sudo pkg install clang34
portmasterコマンドでインストールする場合
sudo portmaster -y -d /usr/ports/lang/clang34
MacOS
Xcode から入れる場合には、以下の通りです。
- Xcode を更新します。
- Xcodeの Preferences の Downloads の Command Line Tools のインストールをクリックします。
FreeBSDへのインストール
FreeBSDでは、pkgコマンド、または、portsコレクションを使用してインストールできます。ベースシステムのコンパイラのコマンドは、/usr/binにありますが、pkg/portsでインストールしたコンパイラのコマンドやライブラリは、/usr/local に入ります。
パッケージの調べ方
$ pkg search clang clang-cheri-3.4.20140528 clang-devel-3.5.r203994 clang32-3.2_3 clang33-3.3_7 clang34-3.4_2
clang 3.6 のインストール
sudo pkg install clang36
clang 3.6(開発版) のインストール
sudo pkg install clang-devel-3.6
clang 3.5 のインストール
C++14用の-std=c++14オプションがサポートされます。
sudo pkg install clang35
clang 3.5(開発版) のインストール
sudo pkg install clang-devel-3.5
clang 3.4 のインストール
sudo pkg install clang34
clang 3.3 のインストール
sudo pkg install clang33
clang 3.2 のインストール
sudo pkg install clang32
Ubuntu
apt/apt-cache でインストールできるパッケージが調べられます。
$ apt search 'clang' |grep ^clang clang - C, C++ and Objective-C compiler (LLVM based) clang-3.3 - C, C++ and Objective-C compiler (LLVM based) clang-3.3-doc - C, C++ and Objective-C compiler (LLVM based) - Documentation clang-3.3-examples - Clang examples clang-3.4 - C, C++ and Objective-C compiler (LLVM based) clang-3.4-doc - C, C++ and Objective-C compiler (LLVM based) - Documentation clang-3.4-examples - Clang examples clang-3.5 - C, C++ and Objective-C compiler (LLVM based) clang-3.5-doc - C, C++ and Objective-C compiler (LLVM based) - Documentation clang-3.5-examples - Clang examples clang-format-3.3 - Tool to format C/C++/Obj-C code clang-format-3.4 - Tool to format C/C++/Obj-C code clang-format-3.5 - Tool to format C/C++/Obj-C code clang-modernize-3.4 - Tool to convert C++98 and C++03 code to C++11 clang-modernize-3.5 - Tool to convert C++98 and C++03 code to C++11
$ apt-cache search 'clang' |grep ^clang
オプション
C++11系
clang++ -std=c++11 ... clang++ -std=c++1y ...
C++14系
clang++ -std=c++14 ...
Abstract Syntax Tree(AST)
clang++ -cc1 -ast-print foo.cpp
詳細については、抽象構文木 (Abstract Syntax Tree, AST) をご参照ください。
コマンドラインオプション
OVERVIEW: clang LLVM compiler USAGE: clang++ [options] <inputs> OPTIONS: -### Print the commands to run for this compilation -E Only run the preprocessor -F <value> Add directory to framework include search path -H Show header includes and nesting depth -I <value> Add directory to include search path -MG Add missing headers to dependency list -MP Create phony target for each dependency (other than main file) -MQ <value> Specify target to quote for dependency -MT <value> Specify target for dependency -ObjC++ Treat source input files as Objective-C++ inputs -ObjC Treat source input files as Objective-C inputs -P Disable linemarker output in -E mode -Qunused-arguments Don't emit warning for unused driver arguments -S Only run preprocess and compilation steps -Wa,<arg> Pass the comma separated arguments in <arg> to the assembler -Wl,<arg> Pass the comma separated arguments in <arg> to the linker -Wp,<arg> Pass the comma separated arguments in <arg> to the preprocessor -W<warning> Enable the specified warning -Xanalyzer <arg> Pass <arg> to the static analyzer -Xassembler <arg> Pass <arg> to the assembler -Xclang <arg> Pass <arg> to the clang compiler -Xlinker <arg> Pass <arg> to the linker -Xpreprocessor <arg> Pass <arg> to the preprocessor --analyze Run the static analyzer -arcmt-migrate-emit-errors Emit ARC errors even if the migrator can fix them -arcmt-migrate-report-output <value> Output path for the plist report -cl-kernel-arg-info OpenCL only. This option allows the compiler to store information about the arguments of a kernel(s) -cxx-isystem <directory> Add directory to the C++ SYSTEM include search path -c Only run preprocess, compile, and assemble steps -dD Print macro definitions in -E mode in addition to normal output -dM Print macro definitions in -E mode instead of normal output -dependency-dot <value> Filename to write DOT-formatted header dependencies to -dependency-file <value> Filename (or -) to write dependency output to -emit-ast Emit Clang AST files for source inputs -emit-llvm Use the LLVM representation for assembler and object files -faltivec Enable AltiVec vector initializer syntax -fapple-kext Use Apple's kernel extensions ABI -fapple-pragma-pack Enable Apple gcc-compatible #pragma pack handling -fblocks Enable the 'blocks' language feature -fborland-extensions Accept non-standard constructs supported by the Borland compiler -fbounds-checking Enable run-time bounds checks -fcolor-diagnostics Use colors in diagnostics -fcomment-block-commands=<arg> Treat each comma separated argument in <arg> as a documentation comment block command -fcxx-exceptions Enable C++ exceptions -fdata-sections Place each data in its own section (ELF Only) -fdelayed-template-parsing Parse templated function definitions at the end of the translation unit -fdiagnostics-parseable-fixits Print fix-its in machine parseable form -fdiagnostics-print-source-range-info Print source range spans in numeric form -fdiagnostics-show-name Print diagnostic name -fdiagnostics-show-note-include-stack Display include stacks for diagnostic notes -fdiagnostics-show-option Print option name with mappable diagnostics -fdiagnostics-show-template-tree Print a template comparison tree for differing templates -fdollars-in-identifiers Allow '$' in identifiers -femit-all-decls Emit all declarations, even if unused -fexceptions Enable support for exception handling -ffast-math Enable the *frontend*'s 'fast-math' mode. This has no effect on optimizations, but provides a preprocessor macro __FAST_MATH__ the same as GCC's -ffast-math flag -fformat-extensions Enable FreeBSD kernel specific format string extensions -ffp-contract=<value> Form fused FP ops (e.g. FMAs): fast (everywhere) | on (according to FP_CONTRACT pragma, default) | off (never fuse) -ffreestanding Assert that the compilation takes place in a freestanding environment -ffunction-sections Place each function in its own section (ELF Only) -fgnu-keywords Allow GNU-extension keywords regardless of language standard -fgnu-runtime Generate output compatible with the standard GNU Objective-C runtime -fgnu89-inline Use the gnu89 inline semantics -finstrument-functions Generate calls to instrument function entry and exit -flimit-debug-info Limit debug information produced to reduce size of debug binary -fmath-errno Require math functions to indicate errors by setting errno -fmodules-cache-path=<directory> Specify the module cache path -fmodules-ignore-macro=<value> Ignore the definition of the given macro when building and loading modules -fmodules-prune-after=<seconds> Specify the interval (in seconds) after which a module file will be considered unused -fmodules-prune-interval=<seconds> Specify the interval (in seconds) between attempts to prune the module cache -fmodules Enable the 'modules' language feature -fms-compatibility Enable Microsoft compatibility mode -fms-extensions Accept some non-standard constructs supported by the Microsoft compiler -fmsc-version=<value> Version of the Microsoft C/C++ compiler to report in _MSC_VER (0 = don't define it (default)) -fno-access-control Disable C++ access control -fno-assume-sane-operator-new Don't assume that C++'s global operator new can't alias any pointer -fno-autolink Disable generation of linker directives for automatic library linking -fno-builtin Disable implicit builtin knowledge of functions -fno-common Compile common globals like normal definitions -fno-constant-cfstrings Disable creation of CodeFoundation-type constant strings -fno-diagnostics-fixit-info Do not include fixit information in diagnostics -fno-diagnostics-show-note-include-stack Display include stacks for diagnostic notes -fno-dollars-in-identifiers Disallow '$' in identifiers -fno-elide-constructors Disable C++ copy constructor elision -fno-elide-type Do not elide types when printing diagnostics -fno-lax-vector-conversions Disallow implicit conversions between vectors with a different number of elements or different element types -fno-limit-debug-info Do not limit debug information produced to reduce size of debug binary -fno-merge-all-constants Disallow merging of constants -fno-objc-infer-related-result-type do not infer Objective-C related result type based on method family -fno-operator-names Do not treat C++ operator name keywords as synonyms for operators -fno-rtti Disable generation of rtti information -fno-sanitize-blacklist Don't use blacklist file for sanitizers -fno-sanitize-recover Disable sanitizer check recovery -fno-show-column Do not include column number on diagnostics -fno-show-source-location Do not include source location information with diagnostics -fno-spell-checking Disable spell-checking -fno-threadsafe-statics Do not emit code to make initialization of local statics thread safe -fno-use-cxa-atexit Don't use __cxa_atexit for calling destructors -fno-use-init-array Don't use .init_array instead of .ctors -fobjc-arc-exceptions Use EH-safe code when synthesizing retains and releases in -fobjc-arc -fobjc-arc Synthesize retain and release calls for Objective-C pointers -fobjc-exceptions Enable Objective-C exceptions -fobjc-gc-only Use GC exclusively for Objective-C related memory management -fobjc-gc Enable Objective-C garbage collection -fobjc-runtime=<value> Specify the target Objective-C runtime kind and version -fpack-struct=<value> Specify the default maximum struct packing alignment -fpascal-strings Recognize and construct Pascal-style string literals -fsanitize-address-zero-base-shadow Make AddressSanitizer map shadow memory at zero offset -fsanitize-blacklist=<value> Path to blacklist file for sanitizers -fsanitize-memory-track-origins Enable origins tracking in MemorySanitizer -fsanitize=<check> Enable runtime instrumentation for bug detection: address (memory errors) | thread (race detection) | undefined (miscellaneous undefined behavior) -fshort-enums Allocate to an enum type only as many bytes as it needs for the declared range of possible values -fshort-wchar Force wchar_t to be a short unsigned int -fshow-overloads=<value> Which overload candidates to show when overload resolution fails: best|all; defaults to all -fslp-vectorize-aggressive Enable the BB vectorization passes -fslp-vectorize Enable the superword-level parallelism vectorization passes -fstrict-enums Enable optimizations based on the strict definition of an enum's value range -ftrap-function=<value> Issue call to specified function rather than a trap instruction -ftrapv-handler=<function name> Specify the function to be called on overflow -ftrapv Trap on integer overflow -funroll-loops Turn on loop unroller -fuse-init-array Use .init_array instead of .ctors -fvectorize Enable the loop vectorization passes -fvisibility-inlines-hidden Give inline C++ member functions default visibility by default -fvisibility-ms-compat Give global types 'default' visibility and global functions and variables 'hidden' visibility by default -fvisibility=<value> Set the default symbol visibility for all global declarations -fwrapv Treat signed integer overflow as two's complement -fwritable-strings Store string literals as writable data -gcc-toolchain <value> Use the gcc toolchain at the given directory -gline-tables-only Emit debug line number tables only -g Generate source level debug information -help Display available options -idirafter <value> Add directory to AFTER include search path -iframework <value> Add directory to SYSTEM framework search path -imacros <file> Include macros from file before parsing -include-pch <file> Include precompiled header file -include <file> Include file before parsing -index-header-map Make the next included directory (-I or -F) an indexer header map -iprefix <dir> Set the -iwithprefix/-iwithprefixbefore prefix -iquote <directory> Add directory to QUOTE include search path -isysroot <dir> Set the system root directory (usually /) -isystem <directory> Add directory to SYSTEM include search path -iwithprefixbefore <dir> Set directory to include search path with prefix -iwithprefix <dir> Set directory to SYSTEM include search path with prefix -iwithsysroot <directory> Add directory to SYSTEM include search path, absolute paths are relative to -isysroot --migrate Run the migrator -mllvm <value> Additional arguments to forward to LLVM's option processing -mms-bitfields Set the default structure layout to be compatible with the Microsoft compiler standard -mno-global-merge Disable merging of globals -mno-implicit-float Don't generate implicit floating point instructions -momit-leaf-frame-pointer Omit frame pointer setup for leaf functions -mqdsp6-compat Enable hexagon-qdsp6 backward compatibility -mrelax-all (integrated-as) Relax all machine instructions -mrtd Make StdCall calling convention the default -msoft-float Use software floating point -mstack-alignment=<value> Set the stack alignment -mstackrealign Force realign the stack at entry to every function -mstrict-align Force all memory accesses to be aligned (ARM only) -nobuiltininc Disable builtin #include directories -nostdinc++ Disable standard #include directories for the C++ standard library -objcmt-migrate-literals Enable migration to modern ObjC literals -objcmt-migrate-subscripting Enable migration to modern ObjC subscripting -o <file> Write output to <file> -pg Enable mcount instrumentation -pipe Use pipes between commands, when possible -print-file-name=<file> Print the full library path of <file> -print-ivar-layout Enable Objective-C Ivar layout bitmap print trace -print-libgcc-file-name Print the library path for "libgcc.a" -print-prog-name=<name> Print the full program path of <name> -print-search-dirs Print the paths used for finding libraries and programs -pthread Support POSIX threads in generated code -rewrite-legacy-objc Rewrite Legacy Objective-C source to C++ -rewrite-objc Rewrite Objective-C source to C++ -save-temps Save intermediate compilation results -serialize-diagnostics <value> Serialize compiler diagnostics to a file -std=<value> Language standard to compile for -stdlib=<value> C++ standard library to use -target <value> Generate code for the given target -time Time individual commands -traditional-cpp Enable some traditional CPP emulation -trigraphs Process trigraph sequences -undef undef all system defines -verify Verify output using a verifier -v Show commands to run and use verbose output -working-directory <value> Resolve file paths relative to the specified directory -w Suppress all warnings -x <language> Treat subsequent input files as having type <language>
コンパイル時の詳細を表示する例
コンパイル時のclang++コマンドの詳細は、-v オプションで表示できます。
掲載上の関係で「改行」を追加しています。
$ clang++ -v unnamed_namespace1.cpp FreeBSD clang version 3.3 (tags/RELEASE_33/final 183502) 20130610 Target: x86_64-unknown-freebsd10.0 Thread model: posix "/usr/bin/clang++" -cc1 -triple x86_64-unknown-freebsd10.0 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -main-file-name unnamed_namespace1.cpp -mrelocation-model static -mdisable-fp-elim -masm-verbose -mconstructor-aliases -munwind-tables -target-cpu x86-64 -v -resource-dir /usr/bin/../lib/clang/3.3 -internal-isystem /usr/include/c++/v1 -fdeprecated-macro -fdebug-compilation-dir /home/kaworu/p/cpp/std/namespace/unnamed_namespace -ferror-limit 19 -fmessage-length 80 -mstackrealign -fobjc-runtime=gnustep -fobjc-default-synthesize-properties -fcxx-exceptions -fexceptions -fdiagnostics-show-option -fcolor-diagnostics -backend-option -vectorize-loops -o /tmp/unnamed_namespace1-GBn6GL.o -x c++ unnamed_namespace1.cpp clang -cc1 version 3.3 based upon LLVM 3.3 default target x86_64-unknown-freebsd10.0 ignoring nonexistent directory "/usr/include/c++/4.2/backward/backward" ignoring nonexistent directory "/usr/bin/../lib/clang/3.3/include" ignoring duplicate directory "/usr/include/c++/4.2" ignoring duplicate directory "/usr/include/c++/4.2/backward" ignoring duplicate directory "/usr/include/c++/4.2/backward" #include "..." search starts here: #include <...> search starts here: /usr/include/c++/v1 /usr/include/c++/4.2 /usr/include/c++/4.2/backward /usr/include/clang/3.3 /usr/include End of search list. "/usr/bin/ld" --eh-frame-hdr -dynamic-linker /libexec/ld-elf.so.1 --hash-style=both --enable-new-dtags -o a.out /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o -L/usr/lib /tmp/unnamed_namespace1-GBn6GL.o -lc++ -lm -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/lib/crtend.o /usr/lib/crtn.o