CMake顶级XCode项目属性

我正在使用Cmake和Xcode生成一个c ++ / c“项目”(my_project)和一些c ++ / c“目标”(一个是二进制文件,其余是库)

我的CMakeLists.txt看起来像这样:

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

每个子目录都有一个CMakeLists.txt,其中包含:

 add_library(library_projectA) 

要么

 add_executable(binary_project) 

这产生了一个顶级my_project.xcodeproj,它引用了子项目。

Xcode具有此Hierarchical属性inheritance(左侧字段优先于右侧字段):

目标,项目,默认

我想更改“项目”字段,即my_project。 这应该会影响所有目标。

我试过这个:

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

但这不起作用。

请注意,如果我把它放在其中一个“目标”中:

 add_target_properties(binary_project PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO") 

然后这可行,但只适用于“目标”

如果不清楚,我很乐意提供一个有效的例子,但这需要一些时间……

关于机会,任何人都知道更快地修复整个问题,我想要一个干净的Xcode安装,而不是没有提出这个(或任何其他)警告:

项目“my_project”会覆盖“架构”设置。 这将删除该设置并允许Xcode根据可用于活动平台和部署目标的硬件自动选择体系结构。

我最近需要相同的东西所以我不得不查看CMake的源代码。

目前,您只能为目标设置属性,并且无法在项目级别设置它们。

但是,可以以稍微不同的方式更改项目级别的ONLY_ACTIVE_ARCH 。 cmake中实现的逻辑如下(对于版本2.8.12):

  1. 如果未设置CMAKE_OSX_ARCHITECTURES ,则cmake在项目级别将ONLY_ACTIVE_ARCH设置为YES ,并根据xcode版本将默认体系结构设置为$(ARCHS_STANDARD_32_64_BIT)$(ARCHS_STANDARD_32_BIT)
  2. 如果定义了ONLY_ACTIVE_ARCH ,则ONLY_ACTIVE_ARCH变为NO

我更喜欢设置CMAKE_OSX_ARCHITECTURES,以便XCode构建胖库,对于最大的库,我只需手动将ONLY_ACTIVE_ARCH设置为YES以进行调试配置。 这看起来像这样:

 set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)") ... set_target_properties(test PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] "YES")