如何使用C-Make向项目添加“非构建”文件

时间:2014-11-26 13:55:31

标签: qt cmake moc

我一直在搜索这个问题几个小时但找不到解决方案,所以问。

我有一个包含大约10个项目的项目解决方案。但我面临着依赖性问题。我的一个项目生成moc文件(由Cmake的'QT4_WRAP_CPP'宏生成的QT moc文件),我想在另一个项目中使用这个moc文件。现在,在运行cmake脚本并获得解决方案之后,我构建了所有项目,并且需要那些由前一个项目生成的moc文件的项目抱怨链接错误(正确的是因为我没有在其c-make中指向任何文件) ADD_EXECUTABLE部分中的脚本)。

我的问题是:有没有办法在Cmake的项目中添加一个'not built yet but will'文件,同时编写cmake脚本?

以下是该项目的cmake脚本的相关部分:

//假设X项目(也在此解决方案中并在Y项目之前构建)生成名为“moc_X.cxx”的moc文件

SET(Y_WORK_STATION_UI_HEADER YWorkStation.h
        YSignInWidget.h
        YConfigurationWidget.h)

     QT4_WRAP_CPP(MOCSrcs ${Y_WORK_STATION_UI_HEADER})

ADD_EXECUTABLE(${PROJECT_NAME}
        main.cpp
        .
        .
        .
        ${MOCSrcs}
        %---------------->and here something like moc_X.cxx ?
    }

希望它足够清楚。提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果文件是由CMake理解的东西生成的(也就是说,通过同一个CMakeList中的自定义命令),你只需列出它,CMake就会自己获取依赖关系。对于其他情况,有一个源文件属性GENERATED,您可以在源文件上设置它以指示它将在构建期间生成:

add_executable(${PROJECT_NAME}
        main.cpp
        .
        .
        .
        ${MOCSrcs}
        moc_X.cxx ?
    )

set_property(SOURCE moc_X.cxx PROPERTY GENERATED TRUE)

答案 1 :(得分:0)

你好像做了几件错事。

开始:

“另一个项目”是什么意思?你真的是指'另一个目标'吗?

为什么一个项目使用另一个项目的moc文件?它是否也使用该项目的源文件?为什么?

如果这是您的目标,为什么不使用静态(或其他)库?如果由于某种原因使用其他项目的源文件是有意义的(我想创建一个单元测试),那么你应该重新编写文件,而不是试图从另一个实现细节位置抓取它们。