我一直在搜索这个问题几个小时但找不到解决方案,所以问。
我有一个包含大约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 ?
}
希望它足够清楚。提前谢谢。
答案 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文件?它是否也使用该项目的源文件?为什么?
如果这是您的目标,为什么不使用静态(或其他)库?如果由于某种原因使用其他项目的源文件是有意义的(我想创建一个单元测试),那么你应该重新编写文件,而不是试图从另一个实现细节位置抓取它们。