我正在尝试在 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})
最佳答案
对我来说,类似的东西,我只是使用:
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
选项指定该命令必须在您提供给此选项的项目构建完成后才能执行。
编辑:
Note that the PRE_BUILD option is only supported on Visual Studio 7 or later. For all other generators PRE_BUILD will be treated as PRE_LINK.
也许这就是它不适合你的原因。
解决方法可能(有点难看):
https://stackoverflow.com/questions/18427877/