2013-11-27 9 views
10

I Cmake mit Xcode bin mit einem C++/C "Projekt" (my_project) und eine C++/C "Ziele" zu erzeugen (eine davon ist eine binäre, der Rest sind Bibliotheken)CMake Top Level XCode Projekteigenschaften

Mein CMakeLists.txt sieht ungefähr so ​​aus:

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

Jeder Subdirectory hat eine CMakeLists.txt mit entweder:

add_library(library_projectA) 

Oder

add_executable(binary_project) 

Dies erzeugt eine Top-Ebene my_project.xcodeproj, die auf die Teilprojekte verweist.

Xcode hat diese hierarchische Vererbung von Eigenschaften (linke Felder haben Vorrang vor den richtigen Feldern):

Ziel, Projekt, Standard

Ich mag würde die „Projekt“ Felder ändern, das heißt für my_project. Dies sollte ALLE Ziele betreffen.

Ich habe dies versucht:

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

Aber das funktioniert nicht.

Beachten Sie, dass, wenn ich dieses in einer der „Targets“:

add_target_properties(binary_project PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") 

Dann das funktioniert, aber nur für das „Target“

Wenn dies nicht klar ist, würde ich Sei froh, ein funktionierendes Beispiel zu bieten, aber das wird ein bisschen Zeit brauchen ...

Auf die aussichtslose jemand weiß von einer schnelleren Lösung für das ganze Problem, ich möchte eine saubere Installation von Xcode nicht nicht kommen Sie mit dieser (oder einer anderen) Warnung:

Projekt 'my_project' überschreibt die Architektureinstellungen. Dies wird entfernen Sie die Einstellung und Xcode automatisch wählen Architekturen basierend auf Hardware für die aktive Plattform und Bereitstellung Ziel verfügbar.

Antwort

3

Ich brauchte vor kurzem das Gleiche, also musste ich in den Quellcode von CMake schauen.

Derzeit können Sie Attribute nur für die Ziele festlegen, und es gibt keine Möglichkeit, sie auf Projektebene festzulegen.

Es ist jedoch möglich, ONLY_ACTIVE_ARCH auf Projektebene in einer etwas anderen Weise zu ändern. Die implementierte Logik in cmake ist die folgende (für Version 2.8.12):

  1. Wenn CMAKE_OSX_ARCHITECTURES nicht gesetzt ist, dann setzt Cmake ONLY_ACTIVE_ARCH-YES auf Projektebene und in Abhängigkeit von Xcode-Version setzt es Standardarchitekturen entweder $(ARCHS_STANDARD_32_64_BIT) oder $(ARCHS_STANDARD_32_BIT)
  2. Wenn CMAKE_OSX_ARCHITECTURES definiert ist, dann ONLY_ACTIVE_ARCH ich habe gerade manuell eingestellt ONLY_ACTIVE_ARCH auf YES für Debug c NO wird

ich ziehe CMAKE_OSX_ARCHITECTURES zu setzen, so dass XCode Fett Bibliotheken und für den größten Bibliotheken baut nur Konfiguration. Das sieht wie folgt aus:

set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)") 

... 

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

Leider dies entbindet nicht von der Warnung OP spricht und zwingt uns, das Update XCode zu verwenden schlägt vor, die aus irgendeinem Grund ein paar andere Einstellungen entfernt. – Samaursa