Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
资源文件两次包含在使用CMake和CPack构建的Mac OS X应用程序包中_Cmake_Cpack - Fatal编程技术网

资源文件两次包含在使用CMake和CPack构建的Mac OS X应用程序包中

资源文件两次包含在使用CMake和CPack构建的Mac OS X应用程序包中,cmake,cpack,Cmake,Cpack,我试图使用CMake和CPack来构建和打包MacOSX应用程序,但我无法找到包含资源的正确方法 这就是我的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

我试图使用CMake和CPack来构建和打包MacOSX应用程序,但我无法找到包含资源的正确方法

这就是我的
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套装
$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的回答和我的评论):


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

由于您已在cmake文件中包含了cpack,因此生成的TGZ将包含将随
makeinstall
一起安装的所有文件。在这种情况下,您必须

SET_TARGET_PROPERTIES(foo PROPERTIES MACOSX_BUNDLE TRUE)
它将
foo
构建为一个OS X应用程序包(,和


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

实际上,这工作得有点太好了。Removing该行导致
foo.txt
根本不包括在
Resources
文件夹中,也不包括在根目录中。但是,将其替换为
SET\u SOURCE\u FILES\u PROPERTIES(foo.txt PROPERTIES MACOSX\u PACKAGE\u LOCATION Resources)行具有预期的效果。
SET_TARGET_PROPERTIES(foo PROPERTIES MACOSX_BUNDLE TRUE)
SET_TARGET_PROPERTIES(foo PROPERTIES RESOURCE TRUE)