编写用于CMAKE的交叉编译配置文件(mingw gcc)

说明

很多C/C++项目是通过CMAKE管理其源代码的.当需要交叉编译时,可以通过cmake-gui一个一个配置交叉编译所需要的定义(系统类型/C编译器/C++编译器).但更加方便的是,事先准备好一个设定交叉编译的配置文件(以.cmake结尾),交叉编译时直接选中该文件,也方便切换不同的交叉工具链.下面的说明均是基于使用mingw gcc在linux下编译windows程序.

  • 在cmake-gui中选择使用配置文件.

在这里插入图片描述

  • 选择代表不同工具链的配置文件.

在这里插入图片描述

  • 配置完成,可使用make编译

在这里插入图片描述

  • 使用make编译

在这里插入图片描述

配置文件说明

配置文件并不是某个程序自动生成的,而是需要手动编写的.配置文件的写法与CMakeList.txt差不多,但需要需注意的是,配置文件中只需要设定编译工具链相关信息,不包含任何工程信息.

在配置文件中至少需要设定以下变量:

  • CMAKE_SYSTEM_NAME
  • CMAKE_C_COMPILER
  • CMAKE_CXX_COMPILER
  • CMAKE_ADDR2LINE
  • CMAKE_AR
  • CMAKE_RANLIB
  • CMAKE_CXX_COMPILER_AR
  • CMAKE_CXX_COMPILER_RANLIB
  • CMAKE_C_COMPILER_AR
  • CMAKE_C_COMPILER_RANLIB
  • CMAKE_Fortran_COMPILER
  • CMAKE_OBJCOPY
  • CMAKE_OBJDUMP
  • CMAKE_RC_COMPILER
  • CMAKE_READELF
  • CMAKE_STRIP
  • CMAKE_LINKER

i686-w64-mingw32工具链配置文件示例

set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_C_COMPILER /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-g++)
set(CMAKE_ADDR2LINE /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-addr2line)
set(CMAKE_AR /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-ar)
set(CMAKE_RANLIB /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-ranlib)
set(CMAKE_CXX_COMPILER_AR /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-ar)
set(CMAKE_CXX_COMPILER_RANLIB /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-ranlib)
set(CMAKE_C_COMPILER_AR /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-ar)
set(CMAKE_C_COMPILER_RANLIB /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-ranlib)
set(CMAKE_Fortran_COMPILER /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-gfortan)
set(CMAKE_OBJCOPY /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-objcopy)
set(CMAKE_OBJDUMP /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-objdump)
set(CMAKE_RC_COMPILER /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-windres)
set(CMAKE_READELF /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-readelf)
set(CMAKE_STRIP /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-strip)
set(CMAKE_LINKER /mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/i686-w64-mingw32-ld)

此编译工具链的二进制执行文件目录为/mnt/data-linux/crosscompile-toolchain/i686-mingw32/i686-mingw32-pthread/bin/,实际使用时需要修改为自己编译工具链的二进制执行文件路径.

x86_64-w64-mingw32工具链配置文件示例

set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_C_COMPILER /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-g++)
set(CMAKE_ADDR2LINE /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-addr2line)
set(CMAKE_AR /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-ar)
set(CMAKE_RANLIB /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-ranlib)
set(CMAKE_CXX_COMPILER_AR /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-ar)
set(CMAKE_CXX_COMPILER_RANLIB /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-ranlib)
set(CMAKE_C_COMPILER_AR /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-ar)
set(CMAKE_C_COMPILER_RANLIB /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-ranlib)
set(CMAKE_Fortran_COMPILER /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-gfortan)
set(CMAKE_OBJCOPY /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-objcopy)
set(CMAKE_OBJDUMP /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-objdump)
set(CMAKE_RC_COMPILER /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-windres)
set(CMAKE_READELF /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-readelf)
set(CMAKE_STRIP /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-strip)
set(CMAKE_LINKER /mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/x86_64-w64-mingw32-ld)

此编译工具链的二进制执行文件目录为/mnt/data-linux/crosscompile-toolchain/x86_64-mingw32-w64/x86_64-mingw32-w64-native/bin/,实际使用时需要修改为自己编译工具链的二进制执行文件路径.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值