作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的问题类似于Targeting both 32bit and 64bit with Visual Studio in same solution/project。
但是,我需要在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 $<
fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'
最佳答案
您没有拥有来使用vcvars。这些是用于在一个平台环境或另一个平台环境中构建的便捷脚本。通过显式调用适当的命令并将其传递给适当的选项,您无需调用两个不同的批处理文件就可以编译两者。
这是将“foo”程序示例编写为GNU makefile的一种方法:
BIN32 = $(VS100COMNTOOLS)..\..\vc\bin
BIN64 = $(VS100COMNTOOLS)..\..\vc\bin\amd64
LIB32 =
LIB64 = \
/libpath:"$(VS100COMNTOOLS)..\..\vc\lib\amd64" \
/libpath:"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\lib\x64"
all: foo.exe foo64.exe
foo.exe: obj32/foo.obj
"$(BIN32)/link.exe" /MACHINE:X86 $(OTHER_FLAGS) $(LIB32) /out:$@ $^
foo64.exe: obj64/foo.obj
"$(BIN64)/link.exe" /MACHINE:X64 $(OTHER_FLAGS) $(LIB64) /out:$@ $^
obj32/foo.obj: foo.c
"$(BIN32)/cl.exe" $(CFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $<
obj64/foo.obj: foo.c
"$(BIN64)/cl.exe" $(CFLAGS) $(INCLUDE_DIRS) /Fo$@ /c $<
vcvarsall.bat x86
是事先运行的,但是即使可以消除它,也需要做更多的工作。
关于visual-studio - 如何在Visual Studio for C/C++中的makefile中同时编译32位和64位应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5807647/
我是一名优秀的程序员,十分优秀!