1

我已经搜索了几个小时,但找不到解决方案,所以问。

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

我的问题是:有没有办法在 Cmake 的项目中添加一个“尚未构建但将”文件以在编写 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 ?
    }

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

4

2 回答 2

1

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

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

set_property(SOURCE moc_X.cxx PROPERTY GENERATED TRUE)
于 2014-11-26T14:00:29.387 回答
0

你似乎做错了几件事。

开始:

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

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

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

于 2014-11-26T19:45:28.267 回答