我正在使用一个外部库,它提供了一个用于自动生成代码的 CMake 函数,用于我的 CMakeLists。问题是,每当我修改 CMakeLists 时,该函数就会再次运行,从而触发重新编译新生成但未更改的源。我需要像 add_custom_command 这样的东西,可以将 CMake 函数指定为 COMMAND 而不是可执行文件,以便仅当自动生成的文件不存在时才运行该函数。这可行吗?如果不是,是否存在获得相同结果的另一种方法?谢谢。
问问题
10271 次
3 回答
8
看看这个 SO 帖子。
您可以在单独的 CMake 脚本中调用您的函数,使用此脚本调用此脚本,add_custom_target
然后cmake -P
将依赖项添加到您的二进制文件中:
add_custom_target(run_script COMMAND ${CMAKE_COMMAND} -P separate_script.cmake)
add_executable(your_binary ...)
# or add_library(your_binary ...)
add_dependencies(your_binary run_script)
于 2016-04-12T17:11:55.303 回答
6
有没有办法将参数传递给separate_script.cmake?
您可以在调用脚本时使用 cmake 变量来传递值,例如
"COMMAND ${CMAKE_COMMAND} -DPARAM=value -P separate_script.cmake"
于 2019-07-12T14:03:03.757 回答
4
为了防止该函数运行,只需将其包装成if
:
if(NOT EXISTS ${CMAKE_BINARY_DIR}/blah-blah/generated.cpp)
run_your_provided_command(BLAH_BLAH)
endif()
简单的!
更新:要在配置文件更改时运行它,只需使用更复杂的条件:
if(
NOT EXISTS ${CMAKE_BINARY_DIR}/blah-blah/generated.cpp OR
${CMAKE_SOURCE_DIR}/blah-blah.config IS_NEWER_THAN ${CMAKE_BINARY_DIR}/blah-blah/generated.cpp
)
...
并使用add_dependencies
命令确保在配置文件修改的情况下将重建您的二进制文件:
add_executable(
YourBinary
...
${CMAKE_BINARY_DIR}/blah-blah/generated.cpp
)
add_dependencies(YourBinary ${CMAKE_SOURCE_DIR}/blah-blah.config)
于 2015-01-14T17:04:42.053 回答