在cmake调用中添加CXX_FLAGS

3

我想知道在调用 cmake 时是否可以附加推断变量。由于编译器或应用程序提供的 CMakeLists.txt 不支持 C++11,因此 cmake 没有检测到它,尽管应用程序需要它。如果我这样做:

cmake-DCMAKE_CXX_FLAGS='-std=c++11' ../source_dir

这些标志会被覆盖,我不想失去推断出的标志。我可以手动运行而不进行覆盖,只需复制标志并附加c++11,但我认为必须有更好的解决方案。

我发现了一些关于在CMakeLists.txt中添加c++11支持的帖子,但没有在cmake调用中找到,所以我想知道这是否可能。请让我知道。

3个回答

3
可以实现。首先,在命令行中创建一个名为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

最近我在为我所工作的应用程序之一构建依赖项时这样做了。你可以利用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

当然,如果脚本中没有覆盖变量,这种方法就会起作用。请尝试这两种方法。

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")

1
所以我正在寻找一种方法,在不更改原始的CMakeLists.txt文件的情况下完成它。我认为-D可以覆盖变量,并且在该库的情况下,我可以清楚地看到它。这是我需要与开发人员沟通的问题吗? - Robert Manson-Sawko
1
-D会预定义变量。很可能开发人员正在覆盖您通过命令行传递的任何内容。 - sbabbi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接