我们目前正在将一个大型项目从GNU autotools移植到CMake。我们的用户非常感兴趣的一个开放性问题(科学计算:用户是开发人员)是切换到调试编译器标志而不重新配置整个项目。
当然有一种解决方法可以添加一些像
这样的东西set_property(TARGET <target> PROPERTY COMPILE_FLAGS <debugflags>)
到CMakeLists.txt并运行
make target
并依靠cmakes缓存功能来配置特定的
但对于习惯于自动化的用户来说
make CXXFLAGS="<debugflags>" <target>
这不是令人信服的方式。
同样适用于拥有2个内置目录,一个有一个目录,另一个没有调试标志。
我已经寻找更多的可能性来模仿这种行为而没有成功。你知道任何?或者您知道是否为未来的cmake版本计划了这些功能吗?
答案 0 :(得分:1)
“问题”是你必须修改你的CmakeLists文件和 之后撤消该更改
您无需为此更改CMakeLists文件。 CMake允许在基于make的生成器的命令行上使用specifying a build type:
cmake -DCMAKE_BUILD_TYPE=Debug [...] && make
这已经为您添加了-g
编译标志。如果您需要其他项目特定标志,可以根据构建类型有条件地添加它们。
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
# do your stuff
endif()
请注意,一旦指定了构建类型,CMake将继续对所有后续运行使用相同的构建类型,除非您通过命令行显式设置不同的构建类型或删除缓存。