2016-06-28 42 views
2

我要产生一些编译时间常数。另一个问题first answer让我相当接近。从我的CMakeLists.txt:获取CMake的申报对象假冒

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而不是cmake变量的值定义。但是当我重新运行make或甚至cmake重新生成makefiles时,不会重新编写compile_time.hpp

我该如何让目标compile_time.cpp被标记为phony,以便它总是重新映射?我试过

add_custom_target(compile_time.hpp) 

没有效果。

回答

3

add_custom_target没有请按选项创建“虚假”​​目标。为了使一些目标从“假”一个依靠,使用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无条件地更新此标头,因此每次都会重建库。