如何在CMake中向MacOS Bundle添加资源

xqnpmsa8  于 2023-11-19  发布在  Mac
关注(0)|答案(1)|浏览(188)

现在我添加这样的资源:

cmake_minimum_required(VERSION 3.26)
project(Example VERSION 1.0 LANGUAGES CXX C)

set(SRC
    src/main.cpp
)
set(SHADERS
    shaders/example.frag
)
set(MODELS
    models/cube.obj
)
add_executable(${PROJECT_NAME}
    ${SRC}
    ${SHADERS}
    ${MODELS}
)

if(APPLE)
    # Bundling macOS application
    set_target_properties(${PROJECT_NAME} PROPERTIES
        BUNDLE True
        MACOSX_BUNDLE_BUNDLE_NAME ${PROJECT_NAME}
        MACOSX_BUNDLE_BUNDLE_VERSION ${CMAKE_PROJECT_VERSION}
        MACOSX_BUNDLE_GUI_IDENTIFIER com.example.${PROJECT_NAME}
        MACOSX_BUNDLE_ICON_FILE AppIcon
        MACOSX_BUNDLE_SHORT_VERSION_STRING ${CMAKE_PROJECT_VERSION}
    )
    set_source_files_properties(${SHADERS}
        PROPERTIES
        MACOSX_PACKAGE_LOCATION "Resources/shaders"
    )
    set_source_files_properties(${MODELS}
        PROPERTIES
        MACOSX_PACKAGE_LOCATION "Resources/models"
    )
    install(TARGETS ${PROJECT_NAME} BUNDLE DESTINATION .)
endif()

字符串
我知道add_executable在这里有点滥用,但即使是官方的CMake示例https://cmake.org/cmake/help/latest/prop_tgt/RESOURCE.html也会添加这样的资源文件,否则我的资源文件不会复制到我的.app文件夹中。
在我的着色器文件中,这是可以正常工作的,但是当我添加模型时,我遇到了一个问题。
我理解这是因为add_executable除了将文件传递给编译器之外什么也不做,而编译器可能不喜欢.obj扩展。
我目前的解决方案是简单地重命名我的模型,例如models/cube.model,但这是非常不满意的,有没有其他方法来添加资源,更优雅?提前感谢

相关问题