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