cmake:模块内的qt资源

时间:2013-09-25 17:21:11

标签: qt resources qt4 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都是新手。

我能尝试什么?

编辑:

如果我在add_library命令中添加${MODULE_NAME}_RHEADERS${MODULE_NAME}_RCS,则会创建 qrc_colors.cxx ,但它位于repository / modules / module1 / built中,而不是复制到应用程序构建目录...

1 个答案:

答案 0 :(得分:1)

您的代码中至少有两个错误。

1)通常没有必要在任何地方使用$ {MODULE_NAME},只需“MODULE_NAME”。您可以看到差异是原始字符串与变量。如果可能,通常建议避免双变量值取消引用。

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

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

  • 您可以将文件设置为CmakeLists.txt而不是CMakeLists.txt,这会在区分大小写的系统上导致问题,因为我的Linux机箱。

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

  • 您的FindFoo.cmake很奇怪,您可能应该重写。

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

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

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

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

如果您想使用查找模块,则需要手头有这个模块。这将告诉你要寻找什么,在哪里,或者如果它们不在任何必要的地方。这不是你应该写的东西。您应该只为那些不使用cmake的项目重用现有项目,因此将单独添加查找模块。

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