在CMake中添加自定义构建步骤

Dav*_*zak 15 c++ build cmake custom-build-step c++11

我正在尝试在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
)
Run Code Online (Sandbox Code Playgroud)

对于文件person.hppODB应该产生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})
Run Code Online (Sandbox Code Playgroud)

Pie*_*aud 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
)
Run Code Online (Sandbox Code Playgroud)

我们不使用DEPENDSVERBATIM.

DEPENDS选项指定只有在构建了为此选项指定的项目之后才能执行该命令.

编辑:

请注意,只有Visual Studio 7或更高版本支持PRE_BUILD选项.对于所有其他生成器,PRE_BUILD将被视为PRE_LINK.

也许这就是为什么它不适合你.

解决方法可能(有点难看):

  • 创建一个假项目
  • 在POST_BUILD上添加自定义命令
  • 让你当前的项目依赖于假的项目