Cmake更改编译标志

时间:2012-06-18 06:09:06

标签: gcc configuration cmake flags

我想为我的cmake项目运行自动优化标记基准测试。 项目是交叉编译的,基本的c / cxx标志设置在可用-DCMAKE_TOOLCHAIN_FILE=<...>分配的工具链文件中。

我想在基准测试期间更改c / cxx标志,但我不想在每个基准测试迭代中更改工具链文件。我只想将从工具链设置的一些标志更改为其他值(例如,-mtune=cortex-a8-mtune=cortex-a9)。我认为最好的方法是使用-DMY_TUNE_FLAG=<..>

但我怎么能改变先前设定的标志? (不要在c / cxx标志上附加标志)。

1 个答案:

答案 0 :(得分:2)

我自己找到了解决方案。有用的string功能在哪里? 例如,我可以使用变量BENCH_ARCH来更改ARM arch。 在所有默认的C / C ++标志定义之后,我在toolchain文件中写了。首先,为缓存添加变量:

...
set(BENCH_ARCH "${BENCH_ARCH}" CACHE STRING "Arch" FORCE)`
...

之后,检查变量是否已设置并替换标志变量

if(BENCH_ARCH)
    string(REGEX REPLACE "-march=[A-Za-z_0-9/-]*" "-march=${BENCH_ARCH}"          <variable, which set flags> ${<variable, which set flags>})
endif()
...

例如:

string(REGEX REPLACE "-march=[A-Za-z_0-9/-]*" "-march=${BENCH_ARCH}" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})

现在,我可以使用cmake -DBENCH_ARCH=armv5te -DCMAKE_TOOLCHAIN_FILE=<...> ...启用-march=armv5te并使用cmake -DCMAKE_TOOLCHAIN_FILE=<...> ...启用默认工具链设置。希望这不仅对我有用。