【发布时间】:2014-09-27 12:01:08
【问题描述】:
我在子目录“xsd”中有一组 .xsd 文件。我使用外部命令生成一组用于 XML 绑定的 .hxx 和 cxx 文件。
add_custom_command(
PRE_BUILD
OUTPUT ${PROJECT_SOURCE_DIR}/xsd/file1.hxx ${PROJECT_SOURCE_DIR}/xsd/file1.cxx
COMMAND ${XSD_EXECUTABLE} cxx-tree
--file-list-prologue 'set(XSD_GENERATED_FILES '
--file-list ${PROJECT_SOURCE_DIR}/cmake_xsd_filelist.txt
--file-list-epilogue ')'
--output-dir ${PROJECT_SOURCE_DIR}/xsd
${XSD_SOURCE_FILES}
DEPENDS ${XSD_SOURCE_FILES}
)
该工具会创建一个生成文件的列表。我有以下形式:
set(XSD_GENERATED_FILES
file1.cpp
file1.hpp
file2.cpp
file2.hpp
)
到这里为止。
现在是我不知道如何继续的部分。我想包含生成的文件列表并将它们添加到可执行文件中。
include(${PROJECT_SOURCE_DIR}/cmake_xsd_filelist.txt)
add_executable(Prog ${SOURCE_FILES} ${XSD_GENERATED_FILES})
但这并没有达到我想要的效果。实际上,它什么也没做,因为最初 cmake_xsd_filelist.txt 是空的。
我的目标如下:
- 当“xsd”文件夹中的文件发生变化时,执行 XSD_EXECUTABLE 以生成 .cpp 和 hpp 文件。
- 生成的 .cpp 文件发生变化时只编译一次
- 将生成的源文件添加到可执行文件中。
这甚至可以用 cmake 实现吗?如果是,怎么做?
【问题讨论】:
-
你知道,或者你能确定cmake时的输出文件吗?
-
否,文件是在构建过程中生成的。
-
这不是我问的:)。我会假装你告诉我不可能确定生成的文件将被调用。
标签: cmake