Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake顶级Xcode项目属性_C++_C_Xcode_Cmake - Fatal编程技术网

C++ CMake顶级Xcode项目属性

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

我正在使用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_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体系结构
    ,则
    仅活动架构
    变为
  • 我更喜欢设置CMAKE_OSX_体系结构,这样XCode就可以构建fat库,对于最大的库,我只是手动将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")
    

    您可以通过将此添加到顶级
    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)