如何在cmake中添加对自定义android编译器的支持?

问题描述 投票:2回答:1

我使用的是自定义Android编译器。编译cpp代码并生成.so文件。从命令提示符它工作正常,但当我尝试使用Cmake构建时,即使在工具链文件中设置了编译器名称后,Cmake总是选择枯萎Clang或GNU编译器进行Android编译。

我的分析和调查结果如下。

我正在努力为ANDROID编译器创建一个工具链文件

我知道,与在IOS或LINUX中指定CMAKE_SYSTEM_NAME相比,在Android中指定CMAKE_SYSTEM_NAME时CMAKE中的流程是不同的

当工具链文件或命令行选项将CMAKE_SYSTEM_NAME设置为“Android”时,请验证我当前的理解

CMakeDetermineSystem.cmake加载此文件:Android-Determine.cmake接下来是特定于平台的初始化步骤:CMakeSystemSpecificInitialize.cmake,它加载Android-Initialize.cmake以选择sysroot。在新构建树中首次启用时,还会为每种语言运行“确定”步骤:

Android-Determine-C.cmake
Android-Determine-CXX.cmake

语言文件在这里:

Determine-Compiler.cmake
Determine-Compiler-NDK.cmake

后一个文件是我们从NDK解析大量信息的地方。结果将持续存在于CMakeFiles / $ v / CMake $ {lang} Compiler.cmake中以供将来运行。

接下来是特定于语言的初始化步骤。例如 - 如果{lang}是C:CMakeCInformation.cmake

加载其中一个:

Android-GNU-C.cmake
Android-Clang-C.cmake

加载其中一个:

Android-GNU.cmake
Android-Clang.cmake

Determine-Compiler-NDK.cmake是cmake查找clang或gcc或llvm工具链版本的地方,并设置相应的编译器。

我们的要求和问题陈述当我尝试从工具链文件手动设置c和cxx编译器时,cmake不允许我指向我的自定义编译器。理想情况下,我希望我的工具链文件告诉cmake包含/链接的库和要使用的编译器。但是一旦System被确定为android,cmake就会经历上述事件序列,并期望为clang,gcc或llvm编译器指定工具链。

我相信我可能需要在以下文件中进行更改以适应cmake使用自定义编译器。 Determine-Compiler-NDK.cmake - 我们需要添加对包含android库和编译器的“NewCompiler Toolchain”的支持。

新的Android- {NewCompiler} -C.cmake,Android- {NewCompiler} -CXX.cmake,Android- {NewCompiler} .cmake和另一个适当的工具链文件来设置目标体系结构和编译器标志。

任何关于该过程的评论或如何解决这个问题将不胜感激。

android cmake clang
1个回答
1
投票

工具链文件可以设置主机上编译器的路径,但是目标平台范围的信息,例如要使用的库集和包括目录通常属于平台信息模块(例如Platform/Android-...等)。

由于您的编译器没有附带NDK,您可以查看使用独立工具链模式。

© www.soinside.com 2019 - 2024. All rights reserved.