【发布时间】:2017-03-31 00:56:38
【问题描述】:
我正在使用由 android ndk13b 制成的独立工具链。它工作正常,但要找到所有工具(链接器、存档器等),我的工具链文件中有一个非常冗长的部分。 有没有办法让它更浓缩?
SET(COMPILER_PATH "<path_to_my_llvm_directory>")
SET(CMAKE_TOOLCHAIN_PREFIX aarch64-linux-android-) #In theory should allow to find minor tools like ar and objdump, see http://stackoverflow.com/a/7032021/2436175
find_program(CMAKE_C_COMPILER clang.cmd PATH ${COMPILER_PATH})
find_program(CMAKE_CXX_COMPILER clang++.cmd PATH ${COMPILER_PATH})
find_program(CMAKE_AR ${CMAKE_TOOLCHAIN_PREFIX}ar.exe PATHS ${COMPILER_PATH})
find_program(CMAKE_RANLIB ${CMAKE_TOOLCHAIN_PREFIX}ranlib.exe PATHS ${COMPILER_PATH})
find_program(CMAKE_LINKER ${CMAKE_TOOLCHAIN_PREFIX}ld.exe PATHS ${COMPILER_PATH})
find_program(CMAKE_NM ${CMAKE_TOOLCHAIN_PREFIX}nm.exe PATHS ${COMPILER_PATH})
find_program(CMAKE_OBJCOPY ${CMAKE_TOOLCHAIN_PREFIX}objcopy.exe PATHS ${COMPILER_PATH})
find_program(CMAKE_OBJDUMP ${CMAKE_TOOLCHAIN_PREFIX}objdump.exe PATHS ${COMPILER_PATH})
find_program(CMAKE_STRIP ${CMAKE_TOOLCHAIN_PREFIX}strip.exe PATHS ${COMPILER_PATH})
什么没用:
- 未明确使用
find_program-> 它从我的路径中的其他 mingw 工具链中找到其他一些工具 - 将
CMAKE_FIND_ROOT_PATH设置为${COMPILER_PATH}。那时它甚至找不到编译器。我可以通过使用SET(CMAKE_C_COMPILER ${COMPILER_PATH}/clang.cmd)(clang++ 相同)设置编译器来解决这个问题,但它仍然找不到其他工具 - 用
find_program尝试各种标志,尤其是ONLY_CMAKE_FIND_ROOT_PATH
请注意,我发现 find_program 是找到这些工具的唯一解决方法,因为例如以下方法不起作用:
SET(CMAKE_AR ${COMPILER_PATH}/${CMAKE_TOOLCHAIN_PREFIX}ar.exe
(存档操作将失败,我可以从 cmake-gui 中看到该变量未设置)。
【问题讨论】:
-
... I can see from cmake-gui that the variable is not set-cmake-gui仅显示 缓存 变量。您可以使用SET(CMAKE_AR ... CACHE PATH "Archiver")。 -
“有没有办法让它更浓缩?”祝你好运。 Cmake 是一个很棒的工具,但语法和语言行为是垃圾。工具包没有用 python 编写,真是太遗憾了(恕我直言):(
-
@RichardHodges 我确实有 python,但要求我所有的同事安装它只是为了能够构建我们的软件不会让我们的生活更轻松。而用python制作一个“完全独立”的程序并非易事。
-
@Tsyvarev 也有例外,比如你设置了
CMAKE_C_COMPILER。
标签: c++ android-ndk cmake cross-compiling