我的问题与在同一解决方案/项目中使用Visual Studio定位32位和64位类似。
然而,我需要在GNUmakefile中完成这个任务。
例如,如果我想通过gcc
交叉编译32位和64位应用程序,我可以在编译和链接时使用-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 $<
上面的示例无法工作,因为您需要在编译32位和64位之间重新运行vcvarsall.bat环境脚本。如果我在运行vcvarsall.bat x86后尝试编译上述示例makefile,则在尝试链接64位可执行文件时会收到此错误:
fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'
有没有一种方法可以在一次make调用中构建32位和64位应用程序?