我的问题与Targeting both 32bit and 64bit with Visual Studio in same solution/project类似。如何在Visual Studio for C/C++中的makefile中同时编译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:[email protected] $^
foo64.exe: obj64/foo.o
link.exe /MACHINE:X64 $(OTHER_FLAGS) /out:[email protected] $^
obj32/foo.o: foo.c
cl.exe $(CFLAGS) $(INCLUDE_DIRS) /[email protected] /c $<
obj64/foo.o: foo.c
cl.exe $(CFLAGS) $(INCLUDE_DIRS) /[email protected] /c $<
上述样品是行不通的,因为你需要重新运行vcvarsall.bat环境脚本在32位和64位的编译之间。如果我尝试运行时86 vcvarsall.bat后编译上面的示例生成,我将要连结的64位可执行文件时出现此错误:
fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'
是否有我们可以完成建设路32和一个调用make的64位应用程序?
谢谢,就是这样!如果在编译之前未运行vcvar,则需要将INCLUDE环境设置为指向Windows SDK包含目录和Visual Studio VC包含目录。 – 2011-04-28 14:58:17