【发布时间】:2021-02-05 12:10:43
【问题描述】:
我正在使用 MSVC 命令行工具尝试在 x64 机器上为 arm/arm64 编译一个简单的基于 c++ 的程序。即使在使用工具链文件之后,编译器定义也没有得到更新,并且正在使用主机的默认编译器。请进一步阅读以了解有关此问题的更多信息。
测试用例:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
}
CMakelists.txt:
cmake_minimum_required(VERSION 3.14.3)
project(hello C CXX ASM)
enable_language(ASM)
add_executable(hello hello.cpp)
工具链文件:
cmake_minimum_required(版本 3.14.3)
set(CMAKE_CROSSCOMPILING 1)
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR ARM)
set(CMAKE_SYSTEM_VERSION 10.0)
set(CMAKE_C_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/arm/cl.exe")
set(CMAKE_CXX_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/arm/cl.exe")
set(CMAKE_ASM_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/arm/cl.exe")
我用来构建这个的命令:
cmake.exe -S C:\hello -B C:\hello\output_dir.cmake -DCMAKE_TOOLCHAIN_FILE=C:\hello\Toolchain.cmake
通过上述配置,我能够构建基于 x64 的应用程序,但 不能构建基于 ARM 的交叉编译应用程序。从控制台日志中,我看到 c 和 c++ 编译器定义没有被覆盖,但 ASM 编译器被使用工具链文件覆盖。
-- Building for: Visual Studio 16 2019
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.
-- The C compiler identification is MSVC 19.28.29336.0
-- The CXX compiler identification is MSVC 19.28.29336.0
-- The ASM compiler identification is MSVC
-- Found assembler: C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/arm/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: C:/hello/output_dir.cmake
我不确定此配置中缺少什么。任何人都可以根据他们的经验提供帮助吗?
【问题讨论】:
-
在没有工具链文件但命令
cmake -S C:\hello -B C:\hello\output_dir.cmake -G "Visual Studio 16 2019" -A ARM64工作的情况下是否可以构建?您可能需要将set(CMAKE_GENERATOR_PLATFORM ARM64)添加到您的工具链文件中。请参阅 Visual Studio 生成器documentation -
They said 你需要有合适的 MSBuild 才能为 Visual Studio 生成交叉编译项目。您可能需要为该 MSBuild 激活适当的环境。
-
附录:根据this,您需要将工具链变量设为缓存条目,即
set(CMAKE_GENERATOR_PLATFORM ARM64 CACHE INTERNAL "")
标签: windows cmake msvc12 cl.exe