-1

我在一个 cmake 中定义了一个变量列表,它是从主 CMakeLists.txt 调用的:

add_custom_target(gen_a
   COMMAND ${CMAKE_COMMAND} -P "gen_sigs.cmake"
)
add_dependencies(${PROJECT_NAME} gen_a)

我的 gen_sigs.cmake:

set(SIG_LIST SIGNAL_A=0 SIGNAL_B=1 SIGNAL_C=0 )

我想使用此列表将预处理器定义添加到编译器命令行,例如(在主 CMakeLists.txt 中):

add_compile_definitions( 
  SIGNAL_A=0 
  SIGNAL_B=1
  SIGNAL_C=0
)

我尝试使用以下内容,但它不起作用(在主 CMakeLists.txt 中):

add_compile_definitions( 
  ${SIG_LIST}
)

我是 cmake 的新手,所以任何关于如何完成这项工作的建议都会有所帮助。此外 add_custom_target 在 add_compile_definitions() 之前定义,它仍然没有帮助。我的猜测是执行顺序存在一些问题,因为当我在 cmakelists.txt 中打印 ${SIG_LIST} 时它没有任何价值。有没有办法向 add_compile_definitions 添加依赖项,以便我的 add_custom_target 命令在 add_compiler_definitions() 之前强制执行?

4

1 回答 1

1

您的问题不是很清楚,但从您所展示的内容来看,以下内容应该有效:

include("${CMAKE_CURRENT_SOURCE_DIR}/gen_sigs.cmake")

target_compile_definitions(main_target PRIVATE ${SIG_LIST})

添加自定义目标将处理推迟到构建时间,但您(似乎)想要做的基本上是配置/生成时间的事情。include()将导致外部脚本立即在与调用相同的范围内执行。

于 2022-02-03T20:46:09.443 回答