在 Windows 上使用 MSVC 工具为 x64_arm 交叉编译

时间:2021-02-05 12:10:43

标签: windows cmake msvc12 cl.exe

我正在使用 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 

我不确定此配置中缺少什么。任何人都可以根据他们的经验提供帮助吗?

1 个答案:

答案 0 :(得分:0)

感谢您的回答。

在我的工具链文件中使用 set(CMAKE_GENERATOR_PLATFORM ARM64 CACHE INTERNAL "") 对我有用,以下是选择正确编译器的日志:

> -- 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/arm64/cl.exe
> -- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual
> Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/arm64/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/arm64/cl.exe
> -- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual
> Studio/2019/BuildTools/VC/Tools/MSVC/14.28.29333/bin/Hostx64/arm64/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
相关问题