【问题标题】:cmake: set icon for a Mac OS X appcmake:为 Mac OS X 应用程序设置图标
【发布时间】:2014-03-30 15:17:32
【问题描述】:

使用cmake环境安装Mac OS X应用,我要设置和安装图标 在安装过程中。

因此,我尝试设置

set( MACOSX_BUNDLE_ICON_FILE ${CMAKE_CURRENT_SOURCE_DIR}/images/myAopImage.icns )
ADD_EXECUTABLE(MYAPP MACOSX_BUNDLE ${MACOSX_BUNDLE_ICON_FILE} ${allSources})
#(I could set it in the source directory to any other path)

但是,这不起作用,它将完整路径写入Info.plist, 并且什么都不安装到资源目录中(资源目录甚至没有得到 在安装的 app 文件夹中创建)

无论如何,即使我手动将信息放入 Info.plist 中

<key>CFBundleIconFile</key>
<string>myAppImage.icns</string>

并手动创建 Resources 目录,将 icns 文件放入其中,

图标无论如何都会出现在应用程序中。

我该如何解决这个问题?起初可能是手动完成,但也可以在 cmake 上下文中完成?

【问题讨论】:

    标签: macos icons cmake


    【解决方案1】:

    从 CMake 捆绑 .icns 文件有两个部分:添加源文件本身,以及在 .plist 中配置它。如果您想指定 .icns 文件的路径(例如,因为它位于子目录中),那么这两个属性引用 .icns 文件的方式会略有不同:

    # NOTE: Don't include the path in MACOSX_BUNDLE_ICON_FILE -- this is
    # the property added to Info.plist
    set(MACOSX_BUNDLE_ICON_FILE myAppImage.icns)
    
    # And this part tells CMake where to find and install the file itself
    set(myApp_ICON ${CMAKE_CURRENT_SOURCE_DIR}/images/myAppImage.icns)
    set_source_files_properties(${myApp_ICON} PROPERTIES
           MACOSX_PACKAGE_LOCATION "Resources")
    
    add_executable(myApp MACOSX_BUNDLE ${myApp_ICON} ${allSources})
    

    【讨论】:

    • 我发现第二个答案比第一个更好,因为第二个答案涉及资源的创建。
    • 同意这应该是公认的答案。无需手动编辑 plist 文件!
    【解决方案2】:

    要将 icns 文件复制到资源文件夹,您需要在其上设置源属性。

    set_source_files_properties(myAppImage.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
    

    另外,我在某处读到 plist 中的字符串不需要 .icns,所以

    <string>myAppImage</string> 
    

    应该没问题。

    【讨论】:

    • 再次感谢,我对你的回答出现在你的前面,所以也许你不会读它.....请参阅上面的内容
    • 关于您的回复,您能否详细说明一下您所说的图标位置是什么意思?
    • 现在它应该被删除,只是一个评论,希望现在一切都好,我是这个论坛的新人......
    • 关于本地化,我的意思是我把它放在源代码上下文中的目录 - 如果我写例如在 set_source_file_properties( ${CMAKE_SOURCE_DIR}/icons/myicon.icns ....) 之类的东西中,然后 cmake 会将完整的绝对路径写入 plist.info 文件,但是如果我将图标直接放入 cmake-source-dir ,然后我只写了 set_source_file_properties(myicon.icns....),然后只写了这个并正确安装了....但是这不允许我将图标放在 cmake 源中的额外目录中代码....
    • 您可以指定 cmakelists.txt 所在目录的相对路径。在您的情况下,您可以使用 ./icons/myicon.icns 来包含该文件。另外,如果我的回答解决了你的问题,你可以接受我的回答,将我的回答标记为正确。
    猜你喜欢
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多