Как настроить CMake для создания приложения для iPhone

Глава Упаковка исполняемых файлов jar и war в справочной документации Spring Boot гласит:

Чтобы создать файл war, который может быть как исполняемым, так и развертываемым, во внешний контейнер необходимо пометить зависимости встроенного контейнера как «предоставленные», например:


    
    
    war
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-tomcat
            provided
        
        
    

25
задан Community 23 May 2017 в 12:34
поделиться

3 ответа

Наконец я понял, как это сделать. Вот как выглядит мой файл CMakeLists.txt :

project(test)
set(NAME test)

file(GLOB headers *.h)
file(GLOB sources *.cpp)

set(CMAKE_OSX_SYSROOT iphoneos2.2.1)
set(CMAKE_OSX_ARCHITECTURES $(ARCHS_STANDARD_32_BIT))
set(CMAKE_CXX_FLAGS "-x objective-c++")
set(CMAKE_EXE_LINKER_FLAGS
    "-framework AudioToolbox -framework CoreGraphics -framework QuartzCore -framework UIKit"
)
link_directories(\${HOME}/\${SDKROOT}/lib)

set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.mycompany.\${PRODUCT_NAME:identifier}")
set(APP_TYPE MACOSX_BUNDLE)

add_executable(${NAME}
    ${APP_TYPE}
    ${headers}
    ${sources}
)

target_link_libraries(${NAME}
    # other libraries to link
)

# code signing
set_target_properties(${NAME} PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer: My Name")

Очевидно, замените mycompany на название вашей компании, а My Name на ваше имя. Я обнаружил, что очень полезно добавить каталог ссылок \ $ {HOME} / \ $ {SDKROOT} / lib , как указано выше, чтобы, если ваше приложение ссылается на статическую библиотеку (особенно общую (не iPhone ), вы можете создавать отдельные библиотеки iPhoneOS и iPhoneSimulator и легко ссылаться на нужную, вместо того, чтобы беспокоиться об универсальном двоичном файле.

Кроме того, кажется, что Xcode неправильно добавляет ресурсы при сборке проекта с использованием CMake, поэтому я добавил этот фрагмент в файл CMakeLists.txt . Он копирует всю папку / data в мою папку ресурсов (как если бы я добавил "синюю" ссылку на папку в Xcode).

# copy resource phase

set(APP_NAME \${TARGET_BUILD_DIR}/\${FULL_PRODUCT_NAME})
set(RES_DIR ${test_SOURCE_DIR}/data)
add_custom_command(
    TARGET ${NAME}
    POST_BUILD
    COMMAND /Developer/Library/PrivateFrameworks/DevToolsCore.framework/Resources/pbxcp -exclude .DS_Store -exclude CVS -exclude .svn -resolve-src-symlinks ${RES_DIR} ${APP_NAME}
)
42
ответ дан 28 November 2019 в 20:45
поделиться

Последние версии CMake передают файлы .m и .mm компилятору C ++, который определяет язык через расширение, поэтому вам не нужно добавлять "- x objective-c ++ "к флагам явно.

1
ответ дан 28 November 2019 в 20:45
поделиться

Для фреймворков я нашел это сообщение http://www.mail-archive.com/ cmake@cmake.org /msg24659.html Я получил достаточно информации для этого :

SET(TARGETSDK iPhoneOS3.1.2.sdk)
SET(CMAKE_OSX_SYSROOT /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/${TARGETSDK})
macro(ADD_FRAMEWORK fwname appname)
    find_library(FRAMEWORK_${fwname}
        NAMES ${fwname}
        PATHS ${CMAKE_OSX_SYSROOT}/System/Library
        PATH_SUFFIXES Frameworks
        NO_DEFAULT_PATH)
    if( ${FRAMEWORK_${fwname}} STREQUAL FRAMEWORK_${fwname}-NOTFOUND)
        MESSAGE(ERROR ": Framework ${fwname} not found")
    else()
        TARGET_LINK_LIBRARIES(${appname} ${FRAMEWORK_${fwname}})
        MESSAGE(STATUS "Framework ${fwname} found at ${FRAMEWORK_${fwname}}")
    endif()
endmacro(ADD_FRAMEWORK)

Вместо настройки CMAKE_EXE_LINKER_FLAGS, теперь я использую:

ADD_FRAMEWORK(AudioToolbox MyApp)
ADD_FRAMEWORK(CoreGraphics MyApp)
ADD_FRAMEWORK(QuartzCore MyApp)
ADD_FRAMEWORK(UIKit MyApp)

Это также работает для OpenGLES.

9
ответ дан 28 November 2019 в 20:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: