cmake:模块内的qt资源

cmake:模块内的qt资源,qt,resources,qt4,cmake,Qt,Resources,Qt4,Cmake,我有这样的树结构: repository/modules/module1 repository/modules/module2 repository/modules/module.. repository/apps/application1 repository/apps/application2 repository/apps/application.. 其中应用程序正在使用一些模块 现在,我想把一些资源放在一个模块中(比如一些应用程序使用的小部件中的彩色图标),但是。。出了点问题 在模块C

我有这样的树结构:

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\U颜色。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,但它位于存储库/模块/模块1/构建中,而不是复制到应用程序构建目录中…

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

1) 通常不必像那样到处使用${MODULE\u NAME},只需使用“MODULE\u NAME”。您可以看到,区别在于原始字符串和变量。如果可能,通常建议避免双变量值解引用

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

另外,资源文件的焦点在这里有点像是在转移注意力。您的项目还有几个其他问题

  • 您可以将文件制作为CmakeLists.txt,而不是CmakeLists.txt,这在区分大小写的系统(如my Linux box)上会固有地导致问题

  • 为此,您使用Findfoo.cmake和find_包(foo),而不是与find_包(foo)一起使用通常的Findfoo.cmake约定

  • 您的FindFoo.cmake非常奇怪,您可能应该被重写

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

文件和示例可在以下位置找到:

当您想要使用查找模块时,您需要已经准备好它。这将告诉你要寻找什么,东西在哪里,或者如果它们不在任何必要的地方。这不是你应该写的东西。对于那些不使用cmake的项目,您应该只重用现有的模块,因此单独添加find模块


这有点像把藏宝图放在宝藏旁边。你明白讽刺的意思吗?:)一旦你找到地图,你也会自动拥有宝藏。i、 e.您将不再寻找它。

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

1) 通常不必像那样到处使用${MODULE\u NAME},只需使用“MODULE\u NAME”。您可以看到,区别在于原始字符串和变量。如果可能,通常建议避免双变量值解引用

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

另外,资源文件的焦点在这里有点像是在转移注意力。您的项目还有几个其他问题

  • 您可以将文件制作为CmakeLists.txt,而不是CmakeLists.txt,这在区分大小写的系统(如my Linux box)上会固有地导致问题

  • 为此,您使用Findfoo.cmake和find_包(foo),而不是与find_包(foo)一起使用通常的Findfoo.cmake约定

  • 您的FindFoo.cmake非常奇怪,您可能应该被重写

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

文件和示例可在以下位置找到:

当您想要使用查找模块时,您需要已经准备好它。这将告诉你要寻找什么,东西在哪里,或者如果它们不在任何必要的地方。这不是你应该写的东西。对于那些不使用cmake的项目,您应该只重用现有的模块,因此单独添加find模块

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