让CMake宣布目标虚假

时间:2016-06-28 14:39:18

标签: makefile cmake compile-time

我想生成一些编译时间常量。另一个问题的first answer让我非常接近。来自我的CMakeLists.txt:

add_library(${PROJECT_NAME} STATIC ${CXX_SRCS} compile_time.hpp)
add_custom_command(OUTPUT compile_time.hpp
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/compile_time.cmake)

这是因为我第一次运行make时生成compile_time.hpp,因此在运行make而非{{1}时定义变量的值}}。但是,当我重新运行cmake甚至compile_time.hpp来重做makefile时,make不会被重新制作。

如何将目标cmake标记为compile_time.cpp,以便始终重新制作?我试过了

phony

无效。

1 个答案:

答案 0 :(得分:4)

没有 DEPENDS 选项的

add_custom_target会创建" phony"目标。为了使一些目标取决于"假的"一,使用add_dependencies()电话:

add_custom_target(compile_time
    COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/compile_time.cmake
)
# Because we use *target-level* dependency, there is no needs in specifying
# header file for 'add_library()' call.
add_library(${PROJECT_NAME} STATIC ${CXX_SRCS})
add_dependencies(${PROJECT_NAME} compile_time)

标题 compile_time.h 中的库依赖项将由标题扫描自动检测。由于脚本compile_time.cmake无条件地更新此标头,因此每次都会重建库。