我正在尝试在CMake中添加一个生成一些文件的自定义构建步骤。我还没有找到它是如何工作的描述。
我有一个项目,包括来源,标题和实现文件必须由ODB for C ++生成。 ODB将类头作为参数,并生成我想在项目中使用的源文件。
现在我的CMakeLists.txt中有以下命令:
add_custom_command(TARGET ${PROJECT_NAME}
PRE_BUILD
COMMAND odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate- query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp
DEPENDS ${PROJECT_NAME}
VERBATIM
)
对于文件person.hpp
,ODB应生成person-odb.hxx
,person-odb.cxx
,person-odb.ixx
但我使用的CMake命令不会生成任何内容。在终端中,这个命令工作正常。
我做错了什么?
编辑:可以通过添加以下行来解决问题:
set(FAKE_TARGET fakeTarget)
add_custom_target(fakeTarget
odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate-query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp
)
add_dependencies(${PROJECT_NAME} ${FAKE_TARGET})
答案 0 :(得分:16)
对我而言,我只是使用:
add_custom_command(TARGET ${PROJECT_NAME}
PRE_BUILD
COMMAND odb -o /home/david/dev/ --std c++11 -I/home/david/dev/ -d sqlite --generate- query --generate-schema ${PROMOTER_LIB_PREFIX}/entities/person.hpp
)
我们不使用DEPENDS
或VERBATIM
。
DEPENDS
选项指定只有在构建了您为此选项指定的项目后才能执行该命令。
编辑:
请注意,仅Visual Studio 7或更高版本支持PRE_BUILD选项。对于所有其他生成器,PRE_BUILD将被视为PRE_LINK。
也许这就是为什么它不适合你。
解决方法可能(有点难看):
答案 1 :(得分:3)
我使用它的方式是:
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp
COMMAND xsltproc --output ${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp ${CMAKE_SOURCE_DIR}/xml/genictabc.xslt ${CMAKE_SOURCE_DIR}/xml/icminstr.xml
)
add_executable(
du4
${CMAKE_CURRENT_BINARY_DIR}/gen_icinstrtab.hpp
.
.
.
)
关键是将甚至.hpp文件添加到add_executable块中。