社区首页 >问答首页 >CMake:在XCode中生成和编译特定于体系结构的源文件

CMake:在XCode中生成和编译特定于体系结构的源文件
EN

Stack Overflow用户
提问于 2017-10-24 08:38:41
回答 2查看 1.1K关注 0票数 2

我有一个CMake项目,用于生成支持多CPU体系结构(arm64和armv7)的面向iOS的XCode项目。

我的CMake项目包括一些命令(用add_custom_command定义),这些命令将Lua脚本转换为C++源文件。这些生成的C++文件根据体系结构不同(不应为arm64编译armv7文件,反之亦然)。该工具的调用方式如下:

代码语言:javascript
代码运行次数:0
复制
./data_tool --input <script> --output <C++ source> --architecture <armv7 or arm64>

我的(不正确的) CMake文件当前如下所示:

代码语言:javascript
代码运行次数:0
复制
foreach(ARCHITECTURE ${TARGET_ARCHITECTURES})
        string(
            REPLACE ".lua" ".cpp" GENERATED_CPP
            ${GENERATED_SOURCE_DIRECTORY}/${ARCHITECTURE}/${INPUT_SCRIPT}
        )

        add_custom_command(
                    OUTPUT ${GENERATED_CPP}
                    COMMAND ${DATA_TOOL} --input "${INPUT_SCRIPT}" --output "${GENERATED_CPP}" --architecture ${ARCHITECTURE}
                    MAIN_DEPENDENCY ${INPUT_SCRIPT}
        )
        list( APPEND GENERATED_SOURCE ${GENERATED_CPP} )
endforeach()

稍后,将GENERATED_SOURCE附加到传递给add_executable的源文件列表中。这段代码显然是错误的,因为armv7和arm64文件都是在为这两种体系结构构建时编译的。

我如何告诉CMake,每个体系结构编译一组不同的源文件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-24 10:07:28

XCode没有一个很好的方法来排除基于正在构建的体系结构的文件。虽然这是可能的(请参阅Disabling some files in XCode project from compilation),但是通过CMake来设置它会有些困难。

相反,我建议让生成工具/脚本在整个文件周围设置预处理器保护,以支持生成的文件所支持的体系结构。这样,当XCode编译它们时,它们本质上将是空的,除了它们所要用于的体系结构。在这个答案(Determine if the device is ARM64)中,它展示了如何基于arm64进行条件编译(并对armv7使用反向编译)。

票数 3
EN

Stack Overflow用户

发布于 2017-10-24 09:29:15

好吧,不要把不同拱门的生成源放在同一个列表中。打开foreach主体,并对每个拱形重复这些命令。

如果不想引入代码复制,可以编写一个CMake function,它创建自定义命令并返回生成的源代码列表。有关如何从函数返回值,请参见this question

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46915776

复制
相关文章
【CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )
该系列博客的应用场景是 Android Studio 下 NDK 编程 , 使用 CMake 构建 C/C++ 工程 ;
韩曙亮
2023/03/28
4.3K0
【CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )
[Article] CMake编译生成so库
第一步 设置CMakeLists.txt位置 // android {} 里增加 externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" } } 第二步 设置CMakeLists.txt配置 cmake_minimum_required(VERSION 3.4.1) // a.cpp、b.cpp 编译成 MyLib.so 库 add_library(MyLib SHARED a.cpp b.cpp)
用户3702315
2021/03/02
2.4K0
CMake脚本中如何修改XCode工程属性?
以下的所有属性列表(https://help.apple.com/xcode/mac/current/#/itcaec37c2a6): Active Build Action (ACTION)
24K纯开源
2020/09/01
5.4K0
CMake编译和链接Luajit的步骤
参考:https://blog.csdn.net/shun_fzll/article/details/39120965
周星星9527
2021/04/12
1.8K0
CMake入门实战——多个源文件
上面的例子只有单个源文件。现在假如把 power 函数单独写进一个名为 MathFunctions.c 的源文件里,使得这个工程变成如下的形式:
AI异构
2020/07/29
2K0
CMake入门实战——单个源文件
你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmake ,微软的 MS nmake,BSD Make(pmake),Makepp,等等。这些 Make 工具遵循着不同的规范和标准,所执行的 Makefile 格式也千差万别。这样就带来了一个严峻的问题:如果软件想跨平台,必须要保证能够在不同平台编译。而如果使用上面的 Make 工具,就得为每一种标准写一次 Makefile ,这将是一件让人抓狂的工作。 CMake就是针对上面问题所设计的工具:它首先允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。显然,CMake 是一个比上述几种 make 更高级的编译配置工具。一些使用 CMake 作为项目架构系统的知名开源项目有 VTK、ITK、KDE、OpenCV、OSG 等。 在 linux 平台下使用 CMake 生成 Makefile 并编译的流程如下:
AI异构
2020/07/29
5520
gcc的编译命令_cmake 编译
—————-加入新公司后,基本上是一键式打包脚本,对于GCC基本上快忘了,重新拾起。
全栈程序员站长
2022/11/04
1.9K0
OpenCV300 CMake生成project在项目过程中的问题
2015年6一个月4日本。OpenCV官网上面给出了最新版本号OpenCV。这是:3.0.0版本号,http://opencv.org/
全栈程序员站长
2022/07/06
5320
OpenCV300 CMake生成project在项目过程中的问题
使用Cmake生成跨平台项目编译解决方案
    项目最近有需求在windows下面运行,我花了几周时间将linux的服务器移植到windows下面,目前已经能够正常运行服务器,目前又有了新需求,两边的代码结构和组织是分开的,因此为了两边能够同步维护,需要一个能够跨平台的项目编译解决方案,经过调研之后,选择了使用cmake这个工具,本文主要讲述,使用cmake的生产项目的一些基础知识。
帘卷西风
2018/08/03
5.5K0
使用Cmake生成跨平台项目编译解决方案
ROS2中CMake编译选项的设置
DCMAKE_BUILD_TYPE是Cmake配置层面上的东西。最终编译类型的相关配置会转化到g++编译选项上。
首飞
2022/07/03
1.9K0
ROS2中CMake编译选项的设置
Protobuf在Cmake中的正确使用
Protobuf是google开发的一个序列化和反序列化的协议库,我们可以自己设计传递数据的格式,通过.proto文件定义我们的要传递的数据格式。例如,在深度学习中常用的ONNX交换模型就是使用.proto编写的。我们可以通过多种前端(MNN、NCNN、TVM的前端)去读取这个.onnx这个模型,但是首先你要安装protobuf。
老潘
2023/10/19
1.7K0
Protobuf在Cmake中的正确使用
c语言编译源文件,c语言编译多个源文件
高久峰
2023/06/29
3290
cmake 生成Makefile时指定c/c++编译器
版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net/10km/article/details/50444715
10km
2019/05/25
7.6K0
Mac开发中Xcode 编译产生app的路径
该目录中有:Debug-iphoneos 和 Release-iphoneos以及Debug-iphonesimulator三个目录
陈满iOS
2018/09/10
1.9K0
Mac开发中Xcode 编译产生app的路径
Clion使用小锦集
Hello,大家好,因为一些个人原因。导演,拍摄和后期一部心理情景剧,学习,谈恋爱,策划笔记活动等等,一直没空来写文章,趁今天写完学生成绩管理系统有空来写一篇,水文章...
Aomsir
2022/12/06
8440
Clion使用小锦集
SoudTouch Android cmake编译
源码下载: https://gitlab.com/soundtouch/soundtouch, 源码下载之后里面有demo参考。 将下载的源码的include和source/SoundTouch目录的文件拷入
曾大稳
2018/09/11
9050
SoudTouch Android cmake编译
如何用cmake编译
CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))。因此CMake的编译基本就两个步骤:
机智的程序员小熊
2019/03/10
4.2K0
如何用cmake编译
用cmake交叉编译到iOS和Android
最近看了下最新版本的cmake的文档,很惊喜地发现他已经支持直接设置Android和OSX的一些变量了,然后有瞄了一眼NDK,发现里面现在也停工官方的cmake支持。
owent
2018/08/01
3.7K0
cmake:VS2015和GCC编译cJSON
cJSON是基于ANSI C的跨平台JSON解析开源库,在嵌入式应用中使用比较广泛, cJSON支持CMAKE编译,本文以脚本形式提供了使用CMAKE基于VS2015/Windows以及GCC/MinGW的编译过程。
10km
2021/11/11
1.3K0
Injection for Xcode 高效Xcode编译调试插件
对于iOS开发者来说,XCode有个另人十分难耐的特性——编译时长的问题。也许工作的时候你能够为自己找到一个闲下来喝杯咖啡的正当的借口,然而,多次的调试编译过程足以让你喝上好多杯咖啡了。应该说,Injection是iOS开发者的福音,它在很大程度上优化了XCode的性能,提升了开发者的工作效率。
freesan44
2018/09/05
1.9K0
Injection for Xcode 高效Xcode编译调试插件

相似问题

Xcode:构建特定于每个文件编译器生成设置的体系结构

15

CMake生成的Xcode项目不会编译

16

在Xcode中编译非源文件

10

CMake多体系结构编译

30

只编译源文件的CMake目标

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文