CMake顶级XCode项目属性

时间:2013-11-27 14:31:15

标签: c++ c xcode cmake

我正在使用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属性继承(左侧字段优先于右侧字段):

目标,项目,默认

我想更改“项目”字段,即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'会覆盖Architectures设置。这将   删除设置并允许Xcode自动选择   基于可用于活动平台的硬件的架构和   部署目标。

2 个答案:

答案 0 :(得分:3)

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

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

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

  1. 如果未设置CMAKE_OSX_ARCHITECTURES,则cmake会在项目级别将ONLY_ACTIVE_ARCH设置为YES,并根据xcode版本将默认架构设置为$(ARCHS_STANDARD_32_64_BIT)或{ {1}}
  2. 如果定义了$(ARCHS_STANDARD_32_BIT),则CMAKE_OSX_ARCHITECTURES会变为ONLY_ACTIVE_ARCH
  3. 我更喜欢设置CMAKE_OSX_ARCHITECTURES,以便XCode构建胖库,对于最大的库,我只是手动将ONLY_ACTIVE_ARCH设置为YES以进行调试配置。看起来像这样:

    NO

答案 1 :(得分:0)

您可以通过在顶级CMakeLists.txt中添加它来实现:

set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Release] NO)

删除[variant=Release]以将其应用于所有变体。