Файл ресурсов дважды включается в пакет приложения Mac OS X, созданный с использованием CMake и CPack.

Я пытаюсь использовать 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 (согласно ответу Джоша и моему комментарию к нему):

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)

person sarnesjo    schedule 08.05.2014    source источник


Ответы (1)


Удаление строки * PROPERTIES RESOURCE foo.txt) должно решить проблему.

Поскольку вы включили cpack в свой файл cmake, сгенерированный 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.

person Josh    schedule 08.05.2014
comment
На самом деле, это сработало слишком хорошо. Удаление этой строки привело к тому, что foo.txt вообще не включался ни в папку Resources, ни в корень. Однако замена его строкой SET_SOURCE_FILES_PROPERTIES(foo.txt PROPERTIES MACOSX_PACKAGE_LOCATION Resources) дала желаемый эффект. - person sarnesjo; 09.05.2014