Мой вопрос аналогичен Ориентация на 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?