我想知道在调用cmake
时是否可以附加到推断的变量。由于CMakeLists.txt
未检测到编译器或应用程序提供的cmake
C ++ 11支持,即使它受支持且应用程序需要它。如果我这样做:
cmake-DCMAKE_CXX_FLAGS='-std=c++11' ../source_dir
标志被覆盖,我不想丢失推断的标志。我可以手动运行而不需要覆盖,只需复制标志并附加c ++ 11,但我认为必须有更好的解决方案。
我发现了一些关于向CMakeLists.txt
添加c ++ 11支持但未在cmake
调用中发布的帖子,所以我想知道这是否可行。请告诉我。
答案 0 :(得分:0)
是的,这是可能的。首先,在命令行中使用所需的标志创建一个名为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
在旁注中,确保 CMake选项之后../source_dir
,否则CMAKE_CXX_STANDARD_REQUIRED
将无效。 (Read)
答案 1 :(得分:0)
您可能正在寻找
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")
答案 2 :(得分:0)
我最近在为我工作的某个应用程序构建依赖项时这样做了。 您可以使用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
当然,如果在脚本中没有覆盖变量,这将有效。尝试两种方法。