2009-04-27 30 views
10

Tôi đang cố gắng sử dụng CMake để tạo cấu hình Xcode cho iPhone bằng cách đặt thủ công các thuộc tính nhất định. (? Đây có phải là thậm chí đúng cách để đi về điều này) tập tin CMake tôi trông như thế:Cách thiết lập CMake để xây dựng thư viện cho iPhone

project(MYLIB) 
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) 
set(CMAKE_CONFIGURATION_TYPES Debug Release Debug-iPhone) 
set(FILES list of my files...) 

add_library(mylib FILES) 

set(XCODE_ATTRIBUTE_SDKROOT iphoneos2.2.1) 
# more attributes later, I'm just trying to get one to work first 

Trước hết, điều này dường như không làm việc - gia vào dự án Xcode tạo (Tôi đang chạy cmake . -G Xcode) , SDKROOT vẫn được đặt thành không có gì và do đó nó hiển thị "Hệ điều hành Mac hiện tại".

Thứ hai, giả sử đây là cách phù hợp để thực hiện việc này, làm cách nào để đặt thuộc tính chỉ cho cấu hình Debug-iPhone?

Trả lời

12

Theo như tôi có thể biết, có hai cách. Một trong những khả năng nhất, bạn đang ở gần đó, là sử dụng CMAKE_OSX_SYSROOT để đặt XROode SDKROOT. Ngoài ra còn có biến số CMAKE_OSX_ARCHITECTURES, ánh xạ tới ARCHS trong XCode.

Cách khác là sử dụng CMake's cross compiling support. Tôi đã không sử dụng nó cho iphone, nhưng tôi đã làm như vậy cho các bộ xử lý ARM khác. Bạn cần phải thiết lập một tập tin toolchain rằng sẽ giống như thế này:

set(CMAKE_SYSTEM_NAME Generic) 
set(CMAKE_SYSTEM_VERSION 1) 
set(CMAKE_SYSTEM_PROCESSOR arm-elf) 
set(CMAKE_C_COMPILER /path/to/complier/bin/arm-elf-gcc) 
set(CMAKE_FIND_ROOT_PATH /path/to/compiler) 
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 

Và sau đó khi bạn chạy cmake, đặt biến CMAKE_TOOLCHAIN_FILE đến tên của tập tin toolchain của bạn. Hoặc nếu bạn chỉ biên dịch thành một kiến ​​trúc, bạn có thể mã hóa cứng giá trị trong tệp CMakeLists.txt. Nhưng tôi tưởng tượng bạn sẽ cần phải vượt qua biên dịch cho các giả lập iphone và cho iphone thực tế chính nó, phải không? Vì vậy, bạn sẽ chạy một trong số này, có lẽ có một vài xây dựng phiên bản:

cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/my/iphone-sim.cmake . 
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/my/iphone-real.cmake . 

Trong trường hợp sim/tập tin thực sự xác định môi trường cho các mô phỏng hoặc các công cụ biên dịch iphone thật.

Một số liên kết khác có thể trợ giúp là this bug reportthis mailing list conversation.

+0

Tôi hiện đang làm đề nghị đầu tiên của bạn; Tôi đã cố gắng biên dịch chéo và không thể làm cho nó nhắm vào kiến ​​trúc đúng (mặc dù nó đã sử dụng trình biên dịch đúng - nó kỳ quái). Tôi tự hỏi - làm thế nào để bạn tìm các biến như CMAKE_OSX_SYSROOT? Nó thậm chí không có vẻ là trong một danh sách, hãy để một mình tài liệu. –

+1

Làm thế nào để cá nhân tôi làm điều đó? Trong trường hợp này, tôi đã đăng ký vào danh sách gửi thư của cmake và tôi nhớ đã thấy một số cuộc thảo luận về iphone ở đó. Một số các biến này cũng xuất hiện trong bộ nhớ cache, vì vậy chạy ccmake hoặc gui ở chế độ nâng cao có thể cung cấp cho bạn một số gợi ý. Không, grep -r trên mã nguồn cmake ... – richq

2

Thông tin này cũng có thể hữu ích:

Dự án này cung cấp một tập tin toolchain iOS đơn giản mà có thể được sử dụng với CMake để xây dựng các thư viện và các ứng dụng cài đặt. Một vài dự án mẫu được bao gồm.

http://code.google.com/p/ios-cmake/

Các vấn đề liên quan