我正在使用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自动选择 基于可用于活动平台的硬件的架构和 部署目标。
答案 0 :(得分:3)
我最近需要相同的东西,所以我不得不查看CMake的源代码。
目前,您只能为目标设置属性,并且无法在项目级别设置它们。
但是,可以以稍微不同的方式更改项目级别的ONLY_ACTIVE_ARCH
。 cmake中实现的逻辑如下(对于版本2.8.12):
CMAKE_OSX_ARCHITECTURES
,则cmake会在项目级别将ONLY_ACTIVE_ARCH
设置为YES
,并根据xcode版本将默认架构设置为$(ARCHS_STANDARD_32_64_BIT)
或{ {1}} $(ARCHS_STANDARD_32_BIT)
,则CMAKE_OSX_ARCHITECTURES
会变为ONLY_ACTIVE_ARCH
我更喜欢设置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]
以将其应用于所有变体。