为Windows 64位编译C代码

6
我已经多年没有接触C语言了,但需要为Windows 7 64位编译一些C源代码。该源代码附带有一个makefile。请问是否可以推荐一个带有make的C编译器?
PS:
make文件:
POSTFIX="_amd64"
CC = CC="cc -Wall"
RANLIB=RANLIB="ranlib"
INSTALLDIR=/usr/local/bin
LIBINSTALLDIR=/usr/local/lib

VERSION=4.12
DATE=10/10/10

PROGRAMS=bib2xml ris2xml end2xml endx2xml med2xml isi2xml copac2xml \
    biblatex2xml ebi2xml wordbib2xml \
    xml2ads xml2bib xml2end xml2isi xml2ris xml2wordbib modsclean

all : FORCE
    cd lib; make -k $(CC) -k $(RANLIB); cd ..
    cd bin; make -k $(CC) -k VERSION="$(VERSION)" -k DATE="$(DATE)"; cd ..

clean: FORCE
    cd lib     ; make clean ; cd ..
    cd bin     ; make clean ; cd ..
    cd test    ; make clean ; cd ..

realclean: FORCE
    cd lib     ; make realclean ; cd ..
    cd bin     ; make realclean ; cd ..
    cd test    ; make realclean ; cd ..
    rm -rf update lib/bibutils.pc

test: all FORCE
    cd lib    ; make test; cd ..
    cd bin    ; make test; cd ..

install: all FORCE
    cd lib ; make -k LIBINSTALLDIR=$(LIBINSTALLDIR) install; cd ..
    sed 's/VERSION/${VERSION}/g' packageconfig_start > lib/bibutils.pc
    @for p in ${PROGRAMS}; \
        do ( cp bin/$$p ${INSTALLDIR}/$$p ); \
    done

package: all FORCE
    csh -f maketgz.csh ${VERSION} ${POSTFIX}

deb: all FORCE
    csh -f makedeb.csh ${VERSION} ${POSTFIX}

FORCE:

我喜欢GnuWin32。你可以使用它的make与任何编译器。 - pmg
5个回答

13

既然这里的每个人都没有理解你明确的64位陈述,我会给出一个正确的答案:

  1. 如果makefile是一个Nmake makefile,你可以安装Visual Studio Express for Windows Desktop,从开始菜单中打开命令提示符(选择针对64位Windows的命令提示符),cd到项目的目录,然后运行nmake。你需要修改makefile来调用cl和link。

  2. 如果Makefile是一个MinGW makefile,你将需要mingw-w64's toolchains targetting Win64(注意也提供32位工具链)。我推荐使用official builds provided through an installer或可从MSYS2安装的版本(见第3点)。安装后,打开MinGW-w64命令提示符,cd到您的项目目录,然后运行mingw32-make

  3. 如果Makefile是一个Unix/MSYS makefile,我建议使用MSYS2。你可以使用上面的工具链,或者在MSYS2 shell中执行pacman -S mingw-w64-x86_64-gcc来安装工具链。确保要么将/mingw64/bin添加到PATH,要么从"MSYS2 MinGW-w64 64-bit"快捷方式启动它。请注意,你可以将MSYS2作为软件包管理工具:安装任何你想要的依赖项(有大量的第三方库二进制文件可供使用),只需将<MSYS2 root>/mingw64/bin目录添加到PATH并从任何地方调用编译器。

  4. 如果项目使用Unix功能(如fork()或其他Unix系统调用),你可以使用64位Cygwin,安装它的编译器,并链接Cygwin dll。这不是推荐的方法,因为存在性能(相对于将代码移植到Win32 API)和许可证惩罚(Cygwin DLL是GPL,这迫使你的程序以GPL兼容的方式进行许可)。

这里有四种使用免费工具编译64位Windows C源文件的方式。如果你是学生,你可能也可以使用以下方法:
5. 从Dreamspark下载Visual Studio Professional(如果你的大学/学院/学校与Microsoft达成协议),并使用它。几乎相当于第一种方法,除非你使用像MFC / ATL和/或VS插件之类的东西,这些在Express版本中无法使用。
6. 从Education offerings website下载Intel编译器。但需要先从第5步安装Visual Studio Professional。您需要修改Makefile以使用Intel编译器。
7. 从here(Windows快照版本)下载LLVM/Clang编译器,并与第5步一起使用。您需要修改makefile来调用clang。
我知道这比你要求的多,但我的高评价答案需要完整,对吧?

谢谢你。我已经添加了make文件(请参见PS)。鉴于此,你提出的哪些观点适用?谢谢! - cs0815
我会尝试使用MSYS的第三个选项。里面有sedcsh。第一个在我提供的MSYS软件包中,第二个我不确定,请自行查看并尝试。 - rubenvb
谢谢。我已经设置了路径,但是出现了以下错误:“make[1]: cc: Command not found”。mingw确实带有gcc,我需要编辑什么吗?一些Linux网站写道只有在没有gcc的情况下才使用cc……有什么想法吗?谢谢。 - cs0815
1
你需要编辑你的Makefile文件,使其变为 CC="gcc -Wall",然后希望它能够正常工作。你可能需要将csh重命名为shbash,但我不确定是否必要,即使你替换了它也不知道是否能正常工作。 - rubenvb
@rubenvb 很好的回答。请问您能否澄清一下这个问题:“安装并打开MinGW-w64命令提示符,cd到您的项目目录,并运行mingw32-make。” 这样做会生成一个64位可执行文件吗?如果不是,是否有类似的mingw64-make命令呢? - sdgfsdh

1

1
你可以尝试使用MinGW,以获得类似于GCC的makefile。


1

Code::Blocks自带Mingw环境,应该能很好地处理makefile文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接