添加自定义的建设步骤的CMake [英] Add custom build step in CMake

查看:627
本文介绍了添加自定义的建设步骤的CMake的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想加入CMa​​ke的自定义生成步骤,生成一些文件。我还没有找到一个描述它是如何工作。

我有一个项目中源,头&放大器;实现文件必须由ODB C ++的产生。 ODB采用类的头文件作为参数,并产生,我想在我的项目中使用的源文件。

现在,我已经在我的CMakeLists.txt下面的命令:

  add_custom_command(TARGET $ {} PROJECT_NAME
    pre_BUILD
    COMMAND ODB -o /家庭/大卫的/ dev / --std C ++ 11 -I /家庭/大卫的/ dev / -d源码--generate-查询--generate型模式$ {PROMOTER_LIB_ preFIX} /实体/person.hpp
    DEPENDS $ {} PROJECT_NAME
    逐字

有关文件 person.hpp ODB应该产生人次odb.hxx 人 - odb.cxx 人次odb.ixx 但CMake的命令我特地使用不会产生任何东西。在终端命令工作正常。

我在做什么错了?

修改:这个问题可以通过添加以下行来解决:

 集(FAKE_TARGET fakeTarget)
add_custom_target(fakeTarget
    ODB -o /家庭/大卫的/ dev / --std C ++ 11 -I /家庭/大卫的/ dev / -d源码--generate查询--generate-模式$ {PROMOTER_LIB_ preFIX} /实体/ person.hpp

add_dependencies($ {PROJECT_NAME} $ {} FAKE_TARGET)


解决方案

对于我来说,有类似的东西,我只是用:

  add_custom_command(TARGET $ {} PROJECT_NAME
    pre_BUILD
    COMMAND ODB -o /家庭/大卫的/ dev / --std C ++ 11 -I /家庭/大卫的/ dev / -d源码--generate-查询--generate型模式$ {PROMOTER_LIB_ preFIX} /实体/person.hpp

我们不使用取决于逐字

DEPENDS 选项指定的命令必须只有你给这个选项,项目建成后执行。

编辑:


  

注意pre_BUILD选项仅支持的Visual Studio 7或更高版本。对于所有其他发电机pre_BUILD将以pre_LINK治疗。


也许这就是为什么它不为你工作。

一个变通可能是(有点难看):


  • 创建一个假的项目

  • 在它加入您的自定义命令POST_BUILD

  • 请您当前的项目取决于假的

I'm trying to add a custom build step in CMake that generates some files. I haven't found a description how it works.

I have an project where source, header & implementation files have to be generated by ODB for C++. ODB takes class headers as arguments and generates source files that I want to use in my project.

Right now I have the following command in my 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
)

For a file person.hpp ODB should generate person-odb.hxx, person-odb.cxx, person-odb.ixx but the CMake command I''ve used doesn't generate anything. In a terminal this command works fine.

What am I doing wrong?

EDIT: The problem can be solved by adding the following lines:

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})

解决方案

For me, with something similar, I just use :

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
)

We don't use DEPENDS or VERBATIM.

The DEPENDS option specify that the command must be executed only after that the project you gave to this option is built.

EDIT :

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.

Maybe that's why it doesn't work for you.

A work around could be (a bit ugly) :

  • Create a fake project
  • Add your custom command on it as POST_BUILD
  • Make you current project dependent on the fake one

这篇关于添加自定义的建设步骤的CMake的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆