我正在尝试使用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
被包含两次:在预期的bundle的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)
答案 0 :(得分:3)
删除行* 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)。使用这两个PROPERTIES集,make install
将创建两个版本的foo.txt。捆绑包中的一个foo.app/Contents/Resources/foot.txt
和顶级目录中的一个foo.txt
。因此,CPack还将生成这两个版本的foo.txt。