C++ CMake顶级Xcode项目属性
我正在使用Cmake和Xcode生成一个c++/c“项目”(my_项目)和一些c++/c“目标”(一个是二进制文件,其余是库) My CMakeLists.txt的外观如下所示:C++ CMake顶级Xcode项目属性,c++,c,xcode,cmake,C++,C,Xcode,Cmake,我正在使用Cmake和Xcode生成一个c++/c“项目”(my_项目)和一些c++/c“目标”(一个是二进制文件,其余是库) My CMakeLists.txt的外观如下所示: project(my_project) add_subdirectory(library_projectA) add_subdirectory(library_projectB) add_subdirectory(binary_project) 每个子目录都有一个CMakeLists.txt,其中包含: add_l
project(my_project)
add_subdirectory(library_projectA)
add_subdirectory(library_projectB)
add_subdirectory(binary_project)
每个子目录都有一个CMakeLists.txt,其中包含:
add_library(library_projectA)
或
它生成一个顶级my_project.xcodeproj,它引用子项目
Xcode具有此分层属性继承(左字段优先于右字段):
目标、项目、默认值
我想更改“项目”字段,即我的_项目。这将影响所有目标
我试过这个:
add_custom_target(my_project)
add_target_properties(my_project PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO")
但这不起作用
请注意,如果我将其放在其中一个“目标”中:
那么这就行了,但只适用于那个“目标”
如果这还不清楚,我很乐意提供一个工作示例,但这需要一些时间
如果有人不知道如何更快地解决整个问题,我希望Xcode的干净安装不会出现以下(或任何其他)警告:
项目“my_Project”覆盖架构设置。这将
删除该设置并允许Xcode自动选择
基于活动平台可用硬件的体系结构和
部署目标
我最近也需要同样的东西,所以我必须研究CMake的源代码 目前,只能为目标设置属性,无法在项目级别设置属性 但是,可以以稍微不同的方式更改项目级别上的
仅\u ACTIVE\u ARCH
。cmake中实现的逻辑如下(对于版本2.8.12):
CMAKE\u OSX\u体系结构
,则CMAKE会在项目级别将仅活动的拱门
设置为是
,并根据xcode版本将默认体系结构设置为$(拱门标准32\u 64位)
或$(拱门标准32位)
CMAKE\u OSX\u体系结构
,则仅活动架构
变为否
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)")
...
set_target_properties(test PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] "YES")
您可以通过将此添加到顶级
CMakeLists.txt
:
set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Release] NO)
删除
[variant=Release]
以将其应用于所有变体。遗憾的是,这并没有删除OP所说的警告,并迫使我们使用XCode建议的修复程序,该程序出于某些奇怪的原因删除了一系列其他设置。这是黄金!不需要摆弄几十个目标和可执行文件。这是最好的解决方案,我不明白为什么这不是投票最多的。
set(CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_64_BIT)")
...
set_target_properties(test PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Debug] "YES")
set(CMAKE_XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH[variant=Release] NO)