1

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.txt2 回含まれます。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)
4

1 に答える 1

3

行を削除* PROPERTIES RESOURCE foo.txt)すると、問題が解決するはずです。

cmake ファイルに cpack を含めたので、生成された TGZ には、.exe でインストールされるすべてのファイルが含まれますmake install。この場合、あなたは

SET_TARGET_PROPERTIES(foo PROPERTIES MACOSX_BUNDLE TRUE)

fooOS X アプリケーション バンドル (ドキュメント)としてビルドされます。

SET_TARGET_PROPERTIES(foo PROPERTIES RESOURCE TRUE)

foo.txt をリソース ファイル ( doc ) として指定します。これらのプロパティの両方を設定make installすると、2 つのバージョンの foo.txt が作成されます。バンドル内のfoo.app/Contents/Resources/foot.txt1 つと、最上位ディレクトリ内の 1 つfoo.txtです。したがって、CPack はこれら 2 つのバージョンの foo.txt も生成します。

于 2014-05-08T20:19:46.347 に答える