1

我们目前正在将一个大型项目从 GNU autotools 移植到 CMake。我们的用户(科学计算:用户是开发人员)非常感兴趣的一个开放问题是在不重新配置整个项目的情况下切换到调试编译器标志。

当然有一种解决方法可以添加一些东西,例如

set_property(TARGET <target> PROPERTY COMPILE_FLAGS <debugflags>)

到 CMakeLists.txt 并运行

make target

并依靠 cmakes 缓存功能仅配置该特定的

但是对于我们习惯于自动制作的用户

make CXXFLAGS="<debugflags>" <target>

这不是令人信服的方法。

拥有 2 个构建目录也是如此,一个有调试标志,一个没有调试标志。

我一直在寻找更多的可能性来模仿这种行为,但没有成功。你知道任何?或者你知道未来的 cmake 版本是否计划了任何此类功能?

4

1 回答 1

1

“问题”是您必须修改 CmakeLists 文件,然后撤消该更改

您无需为此更改 CMakeLists 文件。CMake 允许在命令行上为基于 make 的生成器指定构建类型:

cmake -DCMAKE_BUILD_TYPE=Debug [...] && make

这已经-g为您添加了编译标志。如果您需要额外的项目特定标志,您可以根据构建类型有条件地添加它们。

if(CMAKE_BUILD_TYPE STREQUAL "Debug")
    # do your stuff
endif()

请注意,一旦您指定了构建类型,CMake 将在所有后续运行中继续使用相同的构建类型,除非您通过命令行明确设置不同的构建类型或删除缓存。

于 2013-09-27T07:49:10.670 回答