在 cmake 调用中追加CXX_FLAGS
Appending CXX_FLAGS in cmake invocation
我想知道在调用cmake
时是否可以附加到推断的变量中。由于编译器或应用提供的 CMakeLists.txt
C++11 支持不会被cmake
检测到,即使它受支持并且应用程序需要它。如果我这样做:
cmake-DCMAKE_CXX_FLAGS='-std=c++11' ../source_dir
标志被覆盖,我不想丢失推断的标志。我可以手动运行而不覆盖,只需复制标志并附加 c++11,但我认为必须有更好的解决方案。
我找到了很多关于向CMakeLists.txt
添加 c++11 支持的帖子,但没有cmake
调用中,所以我想知道这是否可能。请让我知道。
是的,这是可能的。首先,在命令行中创建一个名为 MY_FLAGS
的变量,其中包含所需的标志。
cmake -DMY_FLAGS='-std=c++11' ../source_dir
然后,在 CMakeLists.txt
中执行以下操作:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_FLAGS}")
这将有效地将您的标志修改为 CMake 生成的标志。但是,如果要将C++标准设置为 C++11,则只需执行以下操作,而无需直接处理标志:
cmake -DCMAKE_CXX_STANDARD=11 -DCMAKE_CXX_STANDARD_REQUIRED=ON ../source_dir
附带说明一下,请确保../source_dir
在 CMake 选项之后,否则CMAKE_CXX_STANDARD_REQUIRED
将不起作用。(阅读(
我最近在为我工作的应用程序之一构建依赖项时这样做了。您可以使用 2 个 CMake 变量,即:
-DCMAKE_BUILD_TYPE=Debug/Release
-DCMAKE_CXX_FLAGS_[DEBUG/RELEASE]
指定构建类型时,cmake 会将第二个变量中指定的标志添加到编译器标志中。所以对我来说,使用:
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_FLAGS_RELEASE=-fPIC
做了这件事。
在您的情况下,您可以尝试以下方法:
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS_RELEASE=-std=c++11
or
cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS_DEBUG=-std=c++11
当然,如果脚本中没有覆盖变量,这将起作用。尝试这两种方法。
您可能正在寻找
set (CMAKE_CXX_STANDARD 11)
set (CMAKE_CXX_STANDARD_REQUIRED ON)
或通过命令行:
cmake -DCMAKE_CXX_STANDARD=11 -DCMAKE_CXX_STANDARD_REQUIRED=ON
话虽如此,CMAKE_CXX_FLAGS
并没有被 cmake 覆盖,所以你的 CMakeLists.txt 必须在某个地方做。从脚本中设置标志的礼貌方法是附加到变量,即:
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} stuff")
相关文章:
- xmake总是报告:错误:无法获取cxx的程序,为什么
- 在 Julia 中使用 boost 库和 Windows 上的 Cxx.jl
- Cxx.jl 在 Julia Complex 和 std::complex 之间进行转换
- 仅为C++文件(.h、.cpp、.cxx、.c)生成标记文件
- 在为 iOS 构建 aws-sdk-cpp 时,cmake 上的 CXX 编译器错误已损坏
- c++ 链接器错误"针对'.rodata.str1.1'的重新定位R_X86_64_32"链接 CXX 共享库 libsrt.so
- 使用CMake ExternalProject_Add构建mongo cxx驱动程序
- CMake 识别 MSVC(C 和 CXX),但仍抛出"未找到 CMAKE_*_COMPILER"
- Julia Cxx 在模块中打包不同的行为
- 检查工作正常的 CXX 编译器:/cygdrive/c/cygwin64/bin/clang++ -- 已损坏
- C++编译器 g++.exe 无法编译简单的测试程序 - 确定 CXX 编译器是否工作失败
- Mongodb Cxx 驱动程序测试在发布版本中崩溃 [ 在调试中工作正常]
- 使用 CXX 社区插件在 Sonarqube-5.6.6(LTS) 中导入 Gcov 报告
- 在 Ubuntu 16.04 下构建 Android linphone 给出了 CC 和 CXX 的 cmake 路径变
- 链接错误 CXX:找不到 -lvulkan
- 为什么在与静态库链接时强制执行 order(例如 source.cxx -lstatic)
- Android OpenCV Linked CXX 共享库失败
- 如何为声纳-cxx增加圈复杂性
- 重载的 QAbstractItemModel::flags 应该为无效的 QModelIndex 返回什么
- 'Linking CXX executable worldserver'失败