2013-09-25 60 views
1

内qt的资源我有这样的树结构:cmake的:模块

repository/modules/module1 
repository/modules/module2 
repository/modules/module.. 
repository/apps/application1 
repository/apps/application2 
repository/apps/application.. 

其中应用程序正在使用一些模块。

现在,我想把一些资源放在一个模块里面(比如一个应用程序使用的一个小部件中的一个非常奇妙的图标),但是......有些东西出错了。

模块的CMakeLists.txt里面,如果我只用:

set(${MODULE_NAME}_RCS 
    colors.qrc 
) 

... 
qt4_add_resources (${MODULE_NAME}_RHEADERS ${${MODULE_NAME}_RCS}) 

没有qrc_colors.cxx的任何位置创建。所以我试着添加:

ADD_EXECUTABLE (${MODULE_NAME} 
    ${${MODULE_NAME}_RHEADERS} 
) 

但..我得到这个奇怪的错误:

CMake Error at repo/modules/ColorModule/CMakeLists.txt:51 (ADD_EXECUTABLE): 
    add_executable cannot create target "ColorModule" because another 
    target with the same name already exists. The existing target is a static 
    library created in source directory 
    "repo/modules/ColorModule". See documentation for 
    policy CMP0002 for more details. 

(我已经改变了路线的错误的路径)

左右。 。不知道该怎么想,因为我对cmake和qt都是新手。

我该怎么办?

编辑:

如果我添加了${MODULE_NAME}_RHEADERS${MODULE_NAME}_RCS在创建qrc_colors.cxx的add_library命令,但它是在库/模块/模块1 /内置,并在应用程序构建目录不会复制..

回答

1

代码中至少有两个错误。

1)通常没有必要像这样到处使用$ {MODULE_NAME},只需使用“MODULE_NAME”。你可以看到不同的是原始字符串与变量。如果可能,通常建议避免双重变量值解引用。

2)更重要的是,您似乎根据错误输出在多个可执行位置(即“ColorModule”)中设置$ {MODULE_NAME}。你应该有不同的二进制文件的个人可执行文件名。

此外,资源文件的焦点在这里有点红鲱鱼。您的项目还有其他几个问题。

  • 可以CMake的文件作为的CMakeLists.txt代替的CMakeLists.txt其内在原因的区分大小写systes问题作为我的Linux机器。

  • 您使用Findfoo.cmake和find_package(foo),而不是像find_package(Foo)一样使用通常的FindFoo.cmake约定。

  • 你的FindFoo.cmake很奇怪,你应该重写。

  • 最重要的是,你应该使用配置文件,而不是找到模块。

文档和示例可以在这些地方找到:

http://www.cmake.org/Wiki/CMake/Tutorials#CMake_Packages

https://projects.kde.org/projects/kde/kdeexamples/repository/revisions/master/show/buildsystem

当你想使用一个查找模块,你需要有一个在眼前了。这将告诉你要寻找什么,在哪里,或者如果它们不在必要的地方。这不是你应该写的东西。您应该重用现有的那些不使用cmake的项目,因此查找模块将分开添加。

这有点像把宝藏地图放在宝藏旁边。你明白这个讽刺吗? :)一旦你找到地图,你也会自动拥有宝藏。即你不会再找它了。

相关问题