Мой вопрос похож на Ориентация на оба 32-битных и 64-разрядная версия с Visual Studio в одном решении / проекте.
Однако мне нужно сделать это в файле GNUmakefile.
Например, если я хочу перекрестно компилировать 32- и 64-битные приложения через gcc
, я могу использовать флаги -m32
& -m64
во время компиляции и компоновки. Этот метод отличается для Visual Studio, потому что мне нужно запустить vcvarsall.bat x86
для компиляции для 32-разрядной версии и vcvarsall.bat x64
для 64-разрядной версии, чтобы настроить среду для компиляции.
all: foo.exe foo64.exe
foo.exe: obj32/foo.o
link.exe /MACHINE:X86 $(OTHER_FLAGS) /out:$@ $^
foo64.exe: obj64/foo.o
link.exe /MACHINE:X64 $(OTHER_FLAGS) /out:$@ $^
obj32/foo.o: foo.c
cl.exe $(CFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $<
obj64/foo.o: foo.c
cl.exe $(CFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $<
Приведенный выше пример не будет работать, потому что вам нужно повторно запустить сценарий среды vcvarsall.bat между компиляцией 32- и 64-разрядной версии. Если я попытаюсь скомпилировать приведенный выше образец make-файла после запуска vcvarsall.bat x86, я получу эту ошибку при попытке связать 64-битный исполняемый файл:
fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'
Есть ли способ собрать как 32-, так и 64-разрядные приложения с помощью одного вызова make?