CMake:作为“添加\自定义\命令”的命令执行宏/函数

CMake:作为“添加\自定义\命令”的命令执行宏/函数,cmake,add-custom-command,Cmake,Add Custom Command,我正在使用一个外部库,它提供了一个用于自动代码生成的CMake函数,将在我的CmakeList中使用。问题是,每当我修改CMakeLists时,该函数就会再次运行,从而触发重新编译新生成但未更改的源。我需要像add_custom_command这样的东西,可以将CMake函数指定为命令而不是可执行文件,这样,只有在自动生成的文件不存在的情况下才能运行该函数。 这是否可行?如果没有,是否存在获得相同结果的其他方法? 谢谢。若要阻止该函数运行,只需将其包装到中即可: if(NOT EXISTS ${

我正在使用一个外部库,它提供了一个用于自动代码生成的CMake函数,将在我的CmakeList中使用。问题是,每当我修改CMakeLists时,该函数就会再次运行,从而触发重新编译新生成但未更改的源。我需要像add_custom_command这样的东西,可以将CMake函数指定为命令而不是可执行文件,这样,只有在自动生成的文件不存在的情况下才能运行该函数。 这是否可行?如果没有,是否存在获得相同结果的其他方法?
谢谢。

若要阻止该函数运行,只需将其包装到
中即可:

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_executable(
    YourBinary
    ...
    ${CMAKE_BINARY_DIR}/blah-blah/generated.cpp
  )
add_dependencies(YourBinary ${CMAKE_SOURCE_DIR}/blah-blah.config)
看一看

您可以在单独的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)

是否有方法将参数传递给单独的_script.cmake

调用脚本时,可以使用cmake变量传递值,例如

"COMMAND ${CMAKE_COMMAND} -DPARAM=value -P separate_script.cmake" 

谢谢,这在很大程度上解决了我的问题。但是,由于函数读取配置文件以生成代码,因此当配置文件更改时,我需要重新运行它。这就是为什么我要求像add_custom_命令这样的支持依赖关系的东西。哇,我不知道它比。更新的答案是我的问题的完整解决方案,谢谢!您不需要另外检查
不存在
是否比
新,因为后者已经暗示了前者。是否有方法将参数传递给单独的\u script.cmake?