CMAKE_CXX_FLAGS 未传递给编译器:为什么以及如何修复?

问题描述 投票:0回答:1

我通过命令行设置

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 compiler-flags
1个回答
0
投票

为什么 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=
还可以。

© www.soinside.com 2019 - 2024. All rights reserved.