我通过命令行设置
CMAKE_CXX_FLAGS
来传递编译器标志:
$ CC=my_llvm/clang CC=my_llvm/clang++ \
cmake -DCMAKE_AR=my_llvm/llvm-ar -DCMAKE_LD=my_llvm/lld \
-DCMAKE_CXX_FLAGS=--target=aarch64-linux-android34 -S src_dir -B build_dir
CMAKE_<LANG>_FLAGS
的文档说:
这些标志将传递给编译器的所有调用。
但是,
CMAKE_CXX_FLAGS
不会传递给编译器:
$ grep -r CMAKE_CXX_FLAGS build_dir -w
build_dir/CMakeCache.txt:CMAKE_CXX_FLAGS:STRING=--target=aarch64-linux-android34
build_dir/CMakeCache.txt://ADVANCED property for variable: CMAKE_CXX_FLAGS
build_dir/CMakeCache.txt:CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1
而是将
CXX_FLAGS
传递给编译器:
$ grep -rP 'clang.*CXX_FLAGS' build_dir -w
build_dir/CMakeFiles/xxx.dir/build.make: my_llvm/clang++ $(CXX_DEFINES) \
$(CXX_INCLUDES) $(CXX_FLAGS) -MD \
-MT CMakeFiles/xxx.dir/xxx.cpp.o \
-MF CMakeFiles/xxx.dir/xxx.cpp.o.d \
-o CMakeFiles/xxx.dir/xxx.cpp.o -c xxx.cpp
为什么
CMAKE_CXX_FLAGS
没有传递给编译器?怎么解决?
如何通过命令行正确地将编译器标志传递给编译器?
我使用Cmake版本3.22.1:
$ cmake --version
cmake version 3.22.1
我的
CMakeLists.txt
很简单:
cmake_minimum_required(VERSION 3.8)
project("xxx")
add_library(${CMAKE_PROJECT_NAME} SHARED
xxx.cpp)
ADD_LIBRARY(abc STATIC
yyy.cpp)
target_link_libraries(${CMAKE_PROJECT_NAME}
android
log
abc)
为什么 CMAKE_CXX_FLAGS 没有传递给编译器?
因为我将
CXX_FLAGS
传递给 make
作为:
$ make ... CXX_FLAGS="xxx"
因此,将
CXX_FLAGS
传递给 make
会取消由 CXX_FLAGS
生成的 cmake
。
我的错误假设:
CMAKE_CXX_FLAGS
传递给编译器CMAKE_CXX_FLAGS
未转换为 CXX_FLAGS
如何修复?
请勿将
CXX_FLAGS
传递给 make
。
如何通过命令行正确地将编译器标志传递给编译器?
-DCMAKE_CXX_FLAGS=
还可以。