脏生成 header 不重建从属目标
Dirty generated header doesn't rebuild dependant target
我有一个目标,它的 SOURCES
中有一些 header;这些是使用 add_custom_command
生成的。这是摘录
set(MY_SOURCES
a.txt
b.txt)
set(MY_HEADERS)
foreach (TXT ${MY_SOURCES})
add_custom_command(OUTPUT ${TXT}.h
COMMAND txt2h
-i "${CMAKE_CURRENT_SOURCE_DIR}/${TXT}"
-o "${TXT}.h"
MAIN_DEPENDENCY ${TXT}
COMMENT "Generating header from ${TXT}"
VERBATIM)
list(APPEND MY_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/${TXT}.h")
endforeach ()
add_executable(exe main.cpp ${MY_HEADERS})
target_include_directories(exe PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
这生成 (cmake -B build
) 并构建 (cmake --build build
) 很好。
当我编辑 a.txt
和 运行 cmake --build build
时。它重新生成 a.txt.h
因为我看到
Generating header from a.txt
但是,未构建 exe
目标。由于生成的 header 被列为 exe
的来源,我希望它也应该使 exe
变脏并重建它。我错过了什么?
我验证了 a.txt
和 a.txt.h
的时间戳匹配并且比 exe
的时间戳新。
参考资料
Header 个文件未编译。可执行文件依赖于 object 个文件,这些文件是从 cpp
个文件生成的。只有当cpp
个文件中有一个包含header时,才需要在header改变时重新编译,那么当header改变时会重新编译可执行文件。
将header添加到add_executable
中只会使其在某些IDE中显示,没有任何效果。
我有一个目标,它的 SOURCES
中有一些 header;这些是使用 add_custom_command
生成的。这是摘录
set(MY_SOURCES
a.txt
b.txt)
set(MY_HEADERS)
foreach (TXT ${MY_SOURCES})
add_custom_command(OUTPUT ${TXT}.h
COMMAND txt2h
-i "${CMAKE_CURRENT_SOURCE_DIR}/${TXT}"
-o "${TXT}.h"
MAIN_DEPENDENCY ${TXT}
COMMENT "Generating header from ${TXT}"
VERBATIM)
list(APPEND MY_HEADERS "${CMAKE_CURRENT_BINARY_DIR}/${TXT}.h")
endforeach ()
add_executable(exe main.cpp ${MY_HEADERS})
target_include_directories(exe PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
这生成 (cmake -B build
) 并构建 (cmake --build build
) 很好。
当我编辑 a.txt
和 运行 cmake --build build
时。它重新生成 a.txt.h
因为我看到
Generating header from a.txt
但是,未构建 exe
目标。由于生成的 header 被列为 exe
的来源,我希望它也应该使 exe
变脏并重建它。我错过了什么?
我验证了 a.txt
和 a.txt.h
的时间戳匹配并且比 exe
的时间戳新。
参考资料
Header 个文件未编译。可执行文件依赖于 object 个文件,这些文件是从 cpp
个文件生成的。只有当cpp
个文件中有一个包含header时,才需要在header改变时重新编译,那么当header改变时会重新编译可执行文件。
将header添加到add_executable
中只会使其在某些IDE中显示,没有任何效果。