CMake:执行 macro/function 作为 add_custom_command 的命令
CMake: execute a macro/function as the command of add_custom_command
我正在使用一个外部库,它提供了一个用于自动代码生成的 CMake 函数,用于我的 CMakeLists。问题是,每当我修改 CMakeLists 时,函数又是 运行 ,触发重新编译新生成但未更改的源代码。我需要像 add_custom_command 这样的东西,可以将 CMake 函数指定为 COMMAND 而不是可执行文件,这样只有当自动生成的文件不存在时,该函数才是 运行 。
这可行吗?如果不是,是否存在另一种方法来获得相同的结果?
谢谢
要防止该函数 运行,只需将其包装到 if
:
if(NOT EXISTS ${CMAKE_BINARY_DIR}/blah-blah/generated.cpp)
run_your_provided_command(BLAH_BLAH)
endif()
简单!
Update: 运行 当配置文件改变时,只需要使用更复杂的条件:
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)
看看this SO post。
您可以在单独的 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)
Is there a way to pass a parameter to the separate_script.cmake?
您可以在调用脚本时使用 cmake 变量传递值,例如
"COMMAND ${CMAKE_COMMAND} -DPARAM=value -P separate_script.cmake"
我正在使用一个外部库,它提供了一个用于自动代码生成的 CMake 函数,用于我的 CMakeLists。问题是,每当我修改 CMakeLists 时,函数又是 运行 ,触发重新编译新生成但未更改的源代码。我需要像 add_custom_command 这样的东西,可以将 CMake 函数指定为 COMMAND 而不是可执行文件,这样只有当自动生成的文件不存在时,该函数才是 运行 。 这可行吗?如果不是,是否存在另一种方法来获得相同的结果? 谢谢
要防止该函数 运行,只需将其包装到 if
:
if(NOT EXISTS ${CMAKE_BINARY_DIR}/blah-blah/generated.cpp)
run_your_provided_command(BLAH_BLAH)
endif()
简单!
Update: 运行 当配置文件改变时,只需要使用更复杂的条件:
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)
看看this SO post。
您可以在单独的 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)
Is there a way to pass a parameter to the separate_script.cmake?
您可以在调用脚本时使用 cmake 变量传递值,例如
"COMMAND ${CMAKE_COMMAND} -DPARAM=value -P separate_script.cmake"