linux 强制32位编译,使用CMake强制进行32位编译的正确方法

malat..

18

即使这似乎是额外的工作,我相信一个正确的解决方案是在这种情况下使用工具链文件.就像是:

# the name of the target operating system

set(CMAKE_SYSTEM_NAME Linux)

# which compilers to use for C and C++

set(CMAKE_C_COMPILER gcc)

set(CMAKE_C_FLAGS -m32)

set(CMAKE_CXX_COMPILER g++)

set(CMAKE_CXX_FLAGS -m32)

# here is the target environment located

set(CMAKE_FIND_ROOT_PATH /usr/i486-linux-gnu )

# adjust the default behaviour of the FIND_XXX() commands:

# search headers and libraries in the target environment, search

# programs in the host environment

set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)

set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)

set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

然后使用就是:

$ cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake /path/to/source

这里的重要部分是,现在可以指定一个根目录路径(CMAKE_FIND_ROOT_PATH),该路径应该用于搜索第三方lib.实际上,您的编译器可能不够聪明,无法知道在x86_64系统上搜索x86 Qt库的位置.

拥有一个工具链文件允许在par编译器的基础上指定一个不同的文件,并且你应该能够在从windows环境编译32位时调整该选项.

现在这是额外的工作,因为从x86_64 Linux操作系统编译32位非常简单,但这个解决方案适用于其他更奇特的设置.

有关工具链文件的更多信息,可以检查以下示例:

当`cmake/path/to/source -DCMAKE_CXX_FLAGS = -m32 -DCMAKE_C_FLAGS = -m32`可能会发生时,工具链文件可能有点多,但这两个是处理这种情况的唯一正确方法.CMakeLists.txt不应包含此类"信息".除非OP想要防止64位编译发生. (6认同)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值