覆盖cmake项目中单个翻译单元的CXXFLAGS

zf2sa74q  于 2022-11-24  发布在  其他
关注(0)|答案(1)|浏览(173)

我有一个C++文件,它实现了一个基准测试,开头是这样的:

  1. # ifdef YOMM2_BENCHMARK_HIERARCHIES
  2. enum { NH = YOMM2_BENCHMARK_HIERARCHIES };
  3. # else
  4. enum { NH = 10 };
  5. # endif
  6. # ifdef YOMM2_BENCHMARK_OBJECTS
  7. enum { OBJECTS = YOMM2_BENCHMARK_OBJECTS };
  8. # else
  9. enum { OBJECTS = 1000 };
  10. # endif

我想用不同的NHNOBJECT值编译(并运行)那个程序。是否可以在不重新生成构建系统(即重新运行cmake)的情况下完成此操作?
我试过这样的事情:

  1. touch tests/benchmarks.cpp ; CXXFLAGS="-DYOMM2_BENCHMARK_HIERARCHIES=3" make -C build/code/tests benchmarks

...但它不起作用(尽管它可能显示了我试图做的事情)。

oknwwptz

oknwwptz1#

可以使用以下命令设置每目标编译定义

  1. target_compile_definitions( testexe PUBLIC YOMM2_BENCHMARK_OBJECTS )

这会将“-DYOMM2_BENCHMARK_OBJECTS”添加到该目标的编译命令行中。
https://cmake.org/cmake/help/latest/command/target_compile_definitions.html

相关问题