在CMake项目中动态更改编译器标志

时间:2013-11-28 21:01:31

标签: cmake

我有一个大型的cmake项目,目前完全用于生产;默认的gcc标志选项类似于-fpic -s -O3

使用不同的gcc标志重新编译项目的一小部分的最简单方法是什么?

但我知道如何实现这一目标的唯一方法是使用cmake重新生成我的makefile,构建子项目,并再次重新生成makefile。

$ cmake ../ -DCMAKE_C_FLAGS="-fpic -g"
$ make subproject
$ cmake ../ -DCMAKE_C_FLAGS="-fpic -s -O3"

我希望能够将cmake排除在外,并执行以下操作:

$ make C_FLAGS="-fpic -g" subproject

1 个答案:

答案 0 :(得分:1)

您可以使用COMPILE_FLAGS target property在每个目标的基础上设置编译标记。

请注意,这不能直接从命令行设置,因此您必须更改CMakeLists.txt。但是,您可以包含option,允许从命令行切换它:

add_library(subproject...)

set_property(TARGET subproject PROPERTY COMPILE_FLAGS "-fpic")
option(BUILD_SUBPROJECT_WITH_O3 Toggles optimizations for the subproject" OFF)
if(BUILD_SUBPROJECT_WITH_O3)
    set_property(TARGET subproject PROPERTY APPEND COMPILE_FLAGS "-s" "-O3")
else()
    set_property(TARGET subproject PROPERTY APPEND COMPILE_FLAGS "-g")
endif()