【问题标题】:Resource file gets included twice in Mac OS X application package built using CMake and CPack资源文件在使用 CMake 和 CPack 构建的 Mac OS X 应用程序包中包含两次
【发布时间】:2014-05-08 07:39:57
【问题描述】:

我正在尝试使用 CMake 和 CPack 来构建和打包 Mac OS X 应用程序,但我不知道包含资源的正确方法。

这就是我的CMakeLists.txt 的样子:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(foo)
ADD_EXECUTABLE(foo foo.c foo.txt)
SET_TARGET_PROPERTIES(foo PROPERTIES MACOSX_BUNDLE TRUE)
SET_TARGET_PROPERTIES(foo PROPERTIES RESOURCE foo.txt)
INSTALL(TARGETS foo DESTINATION ".")
SET(CPACK_GENERATOR TGZ)
INCLUDE(CPack)

但是,当我使用它来构建包时,foo.txt 被包含两次:在包的 Resources 目录中,如预期的那样,但也在根目录中:

$ cd build
$ cmake ..
$ make package
$ tar -xvzf foo-0.1.1-Darwin.tar.gz 
x foo-0.1.1-Darwin/foo.app/Contents/Info.plist
x foo-0.1.1-Darwin/foo.app/Contents/MacOS/foo
x foo-0.1.1-Darwin/foo.app/Contents/Resources/foo.txt
x foo-0.1.1-Darwin/foo.txt

我做错了什么?

编辑

为了便于阅读,下面是最终的、有效的 CMakeLists.txt 的样子(根据 Josh 的回答和我对此的评论):

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(foo)
ADD_EXECUTABLE(foo foo.c foo.txt)
SET_TARGET_PROPERTIES(foo PROPERTIES MACOSX_BUNDLE TRUE)
SET_SOURCE_FILES_PROPERTIES(foo.txt PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
INSTALL(TARGETS foo DESTINATION ".")
SET(CPACK_GENERATOR TGZ)
INCLUDE(CPack)

【问题讨论】:

    标签: cmake cpack


    【解决方案1】:

    删除* PROPERTIES RESOURCE foo.txt) 应该可以解决问题。

    由于您已在 cmake 文件中包含 cpack,生成的 TGZ 将包含所有将与 make install 一起安装的文件。在这种情况下,你有

    SET_TARGET_PROPERTIES(foo PROPERTIES MACOSX_BUNDLE TRUE)
    

    它将foo 构建为 OS X 应用程序包(doc),以及

    SET_TARGET_PROPERTIES(foo PROPERTIES RESOURCE TRUE)
    

    将 foo.txt 指定为资源文件 (doc)。设置了这两个属性后,make install 将创建两个版本的 foo.txt。一个在捆绑包中,foo.app/Contents/Resources/foot.txt,一个在顶级目录中,foo.txt。因此,CPack 也会生成这两个版本的 foo.txt。

    【讨论】:

    • 实际上,这有点太好用了。删除该行会导致 foo.txt 根本不包含在 Resources 文件夹中或根目录中。但是,将其替换为 SET_SOURCE_FILES_PROPERTIES(foo.txt PROPERTIES MACOSX_PACKAGE_LOCATION Resources) 行具有预期的效果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多