Я наконец-то понял, как это сделать. Вот как выглядит мой 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}
)