1

我有一个嵌入式项目(使用 ESP-IDF,它使用 CMake 构建项目),其中我有一个 props.json 文件,其中包含多个设置(例如“设备类型”)。比如根据CMake的实际值通过调用and"deviceType"打开读取props.json ,然后定义C预处理宏,如:通过使用.execute_process()jqDEVICE_TYPE_Aadd_compile_definitions()

问题是,这只会在我修改 CMakeLists.txt 或清理整个项目时运行,但是当我只更改 props.json 时我不想重新编译每个组件我写的文件(所以,取决于设置)。我想让 CMake 每次构建项目时都读取文件而不清理它。

我做了我的研究,所以我知道有add_custom_target()这样的add_custom_command()行为,但是add_compile_definitions()不能在脚本中调用。有没有解决方案来实现这一点,或者我应该只使用由配置的头文件configure_file()而不add_compile_definitions()理会?

4

1 回答 1

2

这实际上非常简单,您无需手动重新配置 CMake。只需将以下内容添加到CMakeLists.txt包含您的props.json文件的目录中:

set_property(DIRECTORY . APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS props.json)

这将添加props.json到 CMake 生成的构建在确定是否重新运行 CMake 配置步骤时扫描的文件列表中。CMAKE_CONFIGURE_DEPENDS有关更多详细信息,请参阅文档。


通常,您永远不需要在第一次配置后手动重新运行 CMake 1 。如果这样做,则表明您尚未传达 CMake 生成正确构建系统所需的所有信息。

1有一个值得注意的例外:已知 Xcode 在自动重新运行 CMake 配置步骤时存在错误。

于 2021-05-04T16:44:55.650 回答