Cmake更改编译标志

4
我希望运行自动优化标志基准测试来优化我的cmake项目。该项目是交叉编译的,基本的c/cxx标志在工具链文件中设置,可以使用-DCMAKE_TOOLCHAIN_FILE=<...>进行分配。
我想在基准测试期间更改c/cxx标志,但我不想在每个基准测试迭代中更改工具链文件。我只想将一些从工具链设置的标志更改为其他值(例如,将-mtune=cortex-a8更改为-mtune=cortex-a9)。我认为最好的方法是使用-DMY_TUNE_FLAG=<..>
但是我怎样才能更改先前设置的标志?(而不是将标志附加到c/cxx标志上)。
1个回答

4
我已经找到了解决方案。这里有一个有用的string函数。 例如,我可以使用变量BENCH_ARCH来更改ARM架构。 我在工具链文件中编写了所有默认C/C++标志定义之后。首先,添加变量以进行缓存:
...
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=<...> ...来启用默认工具链设置。希望这不仅对我有帮助。


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