当 makefile 中需要多个不同版本时,GCC 会失败

问题描述 投票:0回答:1

我有一个 makefile,需要使用 2 个不同版本的 GCC,以便在同一调用中输出不同的可执行文件。具体来说,我使用的一种是针对旧的 32 位 Windows 计算机,另一种是针对较新的计算机。不幸的是,诸如

-m32
等开关本身并不能解决问题,我确实需要 2 个不同版本的 GCC。

当我将两个版本添加到PATH并直接在makefile中调用它们时,我遇到了

奇怪的错误
。这被理论上归因于 GCC 的模块化设计。我的makefile的基本思想如下:

GCC_32 = i686-w64-mingw32-gcc
GCC_64 = x86_64-w64-mingw32-gcc

win_32_bit: $(COMMON_REQUIREMENTS_NOT_IN_EXAMPLE)
    $(GCC_32) -mwindows -m32 -march=pentium $^ old_main_file.cpp -static-libstdc++ $(LIBS_NOT_IN_EXAMPLE) -o old.exe
win_64_bit: $(COMMON_REQUIREMENTS_NOT_IN_EXAMPLE)
    $(GCC_64) -mwindows -m64 -march=core2 $^ new_main_file.cpp -static-libstdc++ $(LIBS_NOT_IN_EXAMPLE) -o new.exe

如果我从

PATH
中删除对 GCC 的所有引用,然后对路径进行硬编码,那么代码就可以工作了。

GCC_32 = /mingw32/bin/i686-w64-mingw32-gcc
GCC_64 = /mingw64/bin/x86_64-w64-mingw32-gcc

# The rest is the same

显然,硬编码路径不好且不可移植。我宁愿找出发生冲突的原因并编写一个处理它的 makefile。也许有办法,例如相互隐藏其他编译器,或者从

PATH
收集路径,删除它们,然后将它们注入到 makefile 中

c++ gcc makefile path cross-compiling
1个回答
0
投票

您可以要求 shell 为您计算路径:

GCC_32 := $(shell which i686-w64-mingw32-gcc) 
GCC_64 := $(shell which x86_64-w64-mingw32-gcc)

但这只是掩盖了它在没有绝对路径的情况下无法工作的问题......

© www.soinside.com 2019 - 2024. All rights reserved.