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

我正在尝试在 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 选项指定该命令必须在您提供给此选项的项目构建完成后才能执行。

编辑:

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.

也许这就是它不适合你的原因。

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

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

https://stackoverflow.com/questions/18427877/

相关文章:

.net - NuGet Enterprise - 不同成熟度级别包的最佳实践

.net - 无法解析主要引用,因为它是针对比当前目标框架更高版本的 .NET 框架构建的

xcode - 如何在 Xcode 4 的运行脚本构建阶段中使用 sudo?

c++ - 尝试构建 boost 时更新 58 个目标失败,发生了什么?

maven - 在 Jenkins 中设置 Maven 参数

javascript - Bower 和 NPM 如何结合在一起?

maven - 在maven中构建模块时如何构建依赖项目

build - 告诉 cmake 保持安静

ios - 无法运行 faSTLane 叹息。 "Couldn' t下载证书"

javascript - 为什么我要同时使用 TypeScript 和 Babel?