2013-11-27 33 views
10
Bir C++/c "proje" (my_project) ve bazı C++/c "hedefleri" oluşturmak için Xcode ile CMake kullanıyorum

CKağıt Üst Düzey XCode Proje Özellikleri

(bir ikili, geri kalan kütüphaneleri vardır)

project(my_project) 
add_subdirectory(library_projectA) 
add_subdirectory(library_projectB) 
add_subdirectory(binary_project) 

Her Alt dizin ile ya bir CMakeLists.txt vardır: My CMakeLists.txt şuna benzer

add_library(library_projectA) 

ya

add_executable(binary_project) 

Bu, alt projelere başvuran bir üst düzey my_project.xcodeproj üretir.

Target, Project, Varsayılan

ben my_project için, yani "Proje" alanlarını değiştirmek isterdiniz

:

Xcode bu Hiyerarşik özellik mirasını (sol alanları doğru alanlara göre önceliklidir) sahiptir. Bu, TÜM Hedefleri etkilemelidir.

add_custom_target(my_project) 
add_target_properties(my_project PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") 

Ama bu işe yaramazsa:

Bunu denedim.

Not ben "Hedefleri" birinde bu koyarsanız: Bu sadece o "Hedef"

bu net değilse, Bence için değil, işler Ardından

add_target_properties(binary_project PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") 

Bir çalışma örneği sunmaktan mutluluk duyuyoruz, ancak bu biraz zaman alacaktır ...

Hiç kimsenin sorun için daha hızlı bir düzeltmeyi bilmesi durumunda, Xcode'un temiz bir kurulumunu istemiyorum. Bu (veya başka bir) uyarı ile gelmek:

Proje 'my_project', Mimariler ayarını geçersiz kılar. Bu, ayarını kaldıracak ve Xcode'un aktif platform ve dağıtım hedefi için mevcut donanıma göre Mimarilerini otomatik olarak seçmesine izin verecektir.

cevap

3

Kısa bir süre önce CMake'in kaynak kodunu incelemek zorunda kaldım.

Şu anda, yalnızca hedefler için öznitelikleri ayarlayabilir ve bunları proje düzeyinde ayarlamanın yolu yoktur. Ancak, ONLY_ACTIVE_ARCH proje düzeyini biraz farklı bir şekilde değiştirmek mümkündür. Cmake'de uygulanan mantık aşağıdaki gibidir (2.8 sürümü için.12): CMAKE_OSX_ARCHITECTURES ayarlanmazsa

  1. , o cmake proje düzeyinde YES için ONLY_ACTIVE_ARCH ayarlar ve xcode sürümüne bağlı o zaman, ya $(ARCHS_STANDARD_32_64_BIT) veya
  2. $(ARCHS_STANDARD_32_BIT)CMAKE_OSX_ARCHITECTURES Eğer tanımlanır için ONLY_ACTIVE_ARCH varsayılan mimarileri setleri XCode şişman kütüphaneleri oluşturur, böylece NO

Ben CMAKE_OSX_ARCHITECTURES ayarlamayı tercih ve büyük kütüphaneler için sadece elle ayıklama c EVET olarak ONLY_ACTIVE_ARCH ayarlanmış olur yalnızca yapılandırma.

set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)") 

... 

set_target_properties(test PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] "YES") 
+0

Ne yazık ki, bu OP bahsediyor uyarıyı kaldırmaz ve düzeltme XCode bazı garip nedenle diğer ayarların bir demet kaldırır hangi anlaşılacağı kullanmak zorunda kaldık: Bu öyle görünüyor. – Samaursa

İlgili konular