【问题标题】:cmake: qt resources inside a modulecmake:模块内的qt资源
【发布时间】:2013-09-25 17:21:10
【问题描述】:

我有这个树结构:

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 中,而不是在应用程序构建目录中复制...

【问题讨论】:

    标签: qt resources qt4 cmake


    【解决方案1】:

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

    1) 通常不需要像这样在任何地方都使用 ${MODULE_NAME},只需使用“MODULE_NAME”即可。您可以看到区别在于原始字符串与变量。通常建议尽可能避免双变量值取消引用。

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

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

    • 您可以将文件 cmake 为 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 的项目重用现有的,因此 find 模块是单独添加的。

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

    【讨论】:

      猜你喜欢
      • 2015-06-10
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2021-07-16
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      • 2014-09-21
      相关资源
      最近更新 更多