Как компилируете ли вы 32-битные и 64-битные приложения одновременно в Visual Studio для C / C ++ в make-файле?

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

7
задан Community 23 May 2017 в 11:52
поделиться