CMake を使用してビルドされたプロジェクトがいくつかあり、それらをコンパイルするために GCC または Clang/LLVM を簡単に切り替えられるようにしたいと考えています。Clang を使用するには、次のように設定する必要があると思います (間違っていたら訂正してください)。
SET (CMAKE_C_COMPILER "/usr/bin/clang")
SET (CMAKE_C_FLAGS "-Wall -std=c99")
SET (CMAKE_C_FLAGS_DEBUG "-g")
SET (CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG")
SET (CMAKE_C_FLAGS_RELEASE "-O4 -DNDEBUG")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")
SET (CMAKE_CXX_COMPILER "/usr/bin/clang++")
SET (CMAKE_CXX_FLAGS "-Wall")
SET (CMAKE_CXX_FLAGS_DEBUG "-g")
SET (CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELEASE "-O4 -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
SET (CMAKE_AR "/usr/bin/llvm-ar")
SET (CMAKE_LINKER "/usr/bin/llvm-ld")
SET (CMAKE_NM "/usr/bin/llvm-nm")
SET (CMAKE_OBJDUMP "/usr/bin/llvm-objdump")
SET (CMAKE_RANLIB "/usr/bin/llvm-ranlib")
これらとデフォルトの GCC 変数を切り替える簡単な方法はありますか? プロジェクト固有ではなく、システム全体の変更として切り替えるのが望ましいです (つまり、プロジェクトの CMakeLists.txt に追加するだけではありません)。
llvm-*
また、 gcc ではなく clang を使用してコンパイルする場合、システムのデフォルトではなくプログラムを使用する必要がありますか? 違いは何ですか?
ベストアンサー1
CMake は環境変数を尊重しCC
、CXX
使用する C および C++ コンパイラを検出すると、次のものを使用します。
$ export CC=/usr/bin/clang
$ export CXX=/usr/bin/clang++
$ cmake ..
-- The C compiler identification is Clang
-- The CXX compiler identification is Clang
コンパイラ固有のフラグは、makeオーバーライドファイルに入れて、CMAKE_USER_MAKE_RULES_OVERRIDE
~/ClangOverrides.txt
変数を追加します。次の内容のファイルを作成します。
SET (CMAKE_C_FLAGS_INIT "-Wall -std=c11")
SET (CMAKE_C_FLAGS_DEBUG_INIT "-g")
SET (CMAKE_C_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
SET (CMAKE_C_FLAGS_RELEASE_INIT "-O3 -DNDEBUG")
SET (CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g")
SET (CMAKE_CXX_FLAGS_INIT "-Wall -std=c++17")
SET (CMAKE_CXX_FLAGS_DEBUG_INIT "-g")
SET (CMAKE_CXX_FLAGS_MINSIZEREL_INIT "-Os -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELEASE_INIT "-O3 -DNDEBUG")
SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -g")
接尾辞*_INIT
*_FLAGS
CMake は対応する変数を指定された値で初期化します。次に、cmake
次のように呼び出します。
$ cmake -DCMAKE_USER_MAKE_RULES_OVERRIDE=~/ClangOverrides.txt ..
最後に、LLVM binutils の使用を強制するには、内部変数を設定します_CMAKE_TOOLCHAIN_PREFIX
。この変数はモジュールによって尊重されますCMakeFindBinUtils
。
$ cmake -D_CMAKE_TOOLCHAIN_PREFIX=llvm- ..
_CMAKE_TOOLCHAIN_LOCATION
CMake バージョン 3.9 以降では設定は不要になりました。
CC
これらすべてを組み合わせると、環境変数を設定し、前述の変数オーバーライドでCXX
呼び出すシェル ラッパーを作成できます。cmake
こちらもご覧くださいCMake に関するよくある質問オーバーライドファイルの作成時。