【发布时间】:2017-12-01 07:42:43
【问题描述】:
我正在使用定制的 Android 编译器。这会编译 cpp 代码并生成 .so 文件。在命令提示符下它工作正常,但是当我尝试使用 Cmake 构建时,即使在工具链文件中设置了编译器名称,Cmake 也总是选择 wither Clang 或 GNU Compiler 进行 Android 编译。
我的分析和发现如下。
我正在努力为 ANDROID 编译器创建工具链文件
我了解,与将 CMAKE_SYSTEM_NAME 指定为 IOS 或 LINUX 相比,在 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 使用自定义编译器。 Delete-Compiler-NDK.cmake - 我们需要添加对“NewCompiler Toolchain”的支持,该工具链将包含 android 库和编译器。
New Android-{NewCompiler}-C.cmake, Android-{ NewCompiler }-CXX.cmake, Android-{ NewCompiler }.cmake 和另一个合适的工具链文件来设置目标架构和编译器标志。
任何有关该过程或如何进行的 cmets 将不胜感激。
【问题讨论】: