gna*_*nac 5 c++ cmake cross-compiling
我有一个 cmake 交叉编译器工具链文件,缩写为:
set(CMAKE_SYSTEM_NAME Linux)
if( DEFINED TC_PATH )
message( STATUS " TC_PATH IS defined. ${TC_PATH}" )
else()
message( FATAL_ERROR " TC_PATH not defined." )
endif()
set(CMAKE_C_COMPILER ${TC_PATH}/usr/bin/i586-linux/i586-linux-gcc )
set(CMAKE_CXX_COMPILER ${TC_PATH}/usr/bin/i586-linux/i586-linux-g++ )
set(CMAKE_LINKER ${TC_PATH}/usr/bin/i586-linux/i586-linux-ld )
Run Code Online (Sandbox Code Playgroud)
我调用 cmake,设置 TC_PATH 以及工具链文件:
~/CMakeTest/output $ cmake -DTC_PATH:PATH=/opt/toolchain -DCMAKE_TOOLCHAIN_FILE=../toolchain.cmake ../
Run Code Online (Sandbox Code Playgroud)
看来 cmake 正在多次调用工具链文件。在前两次,TC_PATH 检查成功,但后来,在识别编译器后,它抛出错误:
-- TC_PATH IS defined. /opt/toolchain
-- TC_PATH IS defined. /opt/toolchain
-- The C compiler identification is GNU 4.9.1
-- The CXX compiler identification is GNU 4.9.1
-- Check for working C compiler: /opt/toolchain/usr/bin/i586-linux/i586-linux-gcc
CMake Error at /home/gnac/CMakeTest/toolchain.cmake:4 (message):
TC_PATH not defined.
Call Stack (most recent call first):
/home/gnac/CMakeTest/output/CMakeFiles/3.0.2/CMakeSystem.cmake:6 (include)
CMakeLists.txt:2 (project)
Run Code Online (Sandbox Code Playgroud)
因此,除了在 shell 中设置永久环境变量之外,我如何通过命令行设置 TC_PATH 变量,以便在执行 cmake generate 命令时它将保留在上下文中?
您的工具链需要自给自足。失败的步骤是try_compile()没有获取缓存的变量。
您的工具链文件看起来不像您正在交叉编译(它没有CMAKE_SYSTEM_NAME),因此您可以执行以下操作之一(除了设置您提到的CC和环境变量之外):CXX
C提供您和/或编译器的完整路径就足够了CXX(取决于您启用的语言),CMake 将自动检测 GNU 工具链的其余部分
cmake -DCMAKE_C_COMPILER:PATH=/opt/toolchain/usr/bin/i586-linux/i586-linux-gcc \n -DCMAKE_CXX_COMPILER:PATH=/opt/toolchain/usr/bin/i586-linux/i586-linux-g++ ...\nRun Code Online (Sandbox Code Playgroud)将以下内容添加到您的工具链中以跳过编译器测试(因为并非所有选项都可以传递给它,或者因为您选择的编译器/链接器不会生成有效的可执行文件)
\n\nset(CMAKE_C_COMPILER_WORKS 1 CACHE INTERNAL "")\nset(CMAKE_CXX_COMPILER_WORKS 1 CACHE INTERNAL "")\nRun Code Online (Sandbox Code Playgroud)\n\n或者只使用CMakeForceCompiler宏,但使用是“不鼓励的。如果可能,避免使用此模块”。
用于configure_file()将路径放入工具链文件中(只需确保在project()调用之前执行此操作)
最好find_program()知道工具链的可能路径,而不是从外部设置它(参见例如此处)
参考
\n\n| 归档时间: |
|
| 查看次数: |
1909 次 |
| 最近记录: |