我试图在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.hxxperson-odb.cxxperson-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
)

我们不使用DEPENDSVERBATIM
DEPENDS选项指定仅在构建为此选项提供的项目后才必须执行命令。

编辑:



也许这就是为什么它对您不起作用的原因。

解决方法可能是(有点难看):
  • 创建一个假项目
  • 在其上添加您的自定义命令为POST_BUILD
  • 使您当前的项目依赖于伪造的
  • 关于c++ - 在CMake中添加自定义构建步骤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18427877/

    10-11 21:53