注册 登录
编程论坛 C++教室

mingw 多文件编译

charderkk 发布于 2011-01-28 00:25, 3358 次点击
windows下装了mingw,平时编译文件就是在cmd中用g++ -o test test.cpp,现遇到两个问题
1  多文件时编译时 是不是只要g++ -o test 1.cpp 2.cpp 3.cpp 等等,而不需要管后面那些源文件的依赖关系?


2 想问一下如何使用mingw的make命令?
自己在cmd中输入make,就提示'make' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
最好能有个简单的例子,谢谢各位了
13 回复
#2
rjsp2011-01-28 08:24
1. 听不懂

2. mingw32-make.exe 在mingw安装目录的bin子目录下
#3
charderkk2011-01-28 10:02
回复 2楼 rjsp
不好意思  没表述清楚
1  一般多文件编译, 以网上的8个.cpp源文件和3个.h头文件为例 。可以写makefile 来表述各文件的依赖关系,如果不写makefile,想要生成可执行文件test.exe 的话,是不是只要在cmd中键入命令 g++ -o test.exe 1.cpp 2.cpp....   8.cpp  就行了

2 谢了 还有问题是不是  写的makefile 和 源文件头文件 要和 mingw32-make.exe 在一个目录下
#4
rjsp2011-01-28 10:40
1. 是
makefile中标明了依赖关系,即nmake时没改变的就可以不用重新编译,从而节约时间。

2. 当然不必这样了,你可以将nmake.exe所在的路径加到系统path中去
#5
pangding2011-01-28 22:24
如果只有少数几个源文件的话,就可以用你的那个命令编译一下。不过如果多了,比如你说的8个,我觉得还是用 make 好一点。

mingw 的问题以前论坛就有人问过。不过我也没用过,不是很清楚。那个 path 的问题,难道装好之后连根目录下的 bin 都没添加进去吗?反正在 windows 下弄这些东西感觉挺麻烦的。
#6
charderkk2011-01-29 14:25
回复 楼主 charderkk
在e:cpp\下写了makefile:其中 4.6.cpp grade.cpp median.cpp read_hw.cpp 均在此目录下
4.6:4.6.o grade.o median.o read_hw.o
    gcc -o 4.6 grade.o median.o read_hw.o
4.6.o:  4.6.cpp grade.h read_hw.h
    gcc -c 4.6.cpp
grade.o:grade.cpp grade.h median.h Student_info.h
    gcc -c grade.cpp
median.o:median.cpp median.h
    gcc -c median.cpp

但是用make时出现以下提示:
E:\cpp>make
make: makefile: Permission denied
make: *** No targets.  Stop.
将.O换成.obj也一样不行,不知是什么原因?(注: 用g++ -o 4.6 4.6.cpp median.cpp grade.cpp read_hw.cpp 可以通过且运行正常)

[ 本帖最后由 charderkk 于 2011-1-29 14:30 编辑 ]
#7
pangding2011-01-29 16:11
make: makefile: Permission denied这个是说 make 权限不足,打不开 makefile。这个问题挺诡异呀。你的 makefile 可读吧应该?
#8
pangding2011-01-29 16:18
Makefile 有模式匹配。比如可以写

%.o: %.cpp
        g++ -c -o $@ $<

之后所有的 .o 目标都会套用这个规则,像你的那三个就可以不用写了。
当然如果有的有特殊需要,自己写的具体的 ***.o 规则会覆盖这个模式。
#9
charderkk2011-01-29 20:58
回复 7楼 pangding
谢谢pangding,看了下属性 没有只读啊,从网上搜了一些资料,也没有很好解决...
#10
pangding2011-01-29 22:37
你写个测试用的小项目,然后来个 Makefile 看看行不行?可能那个错误和你的系统设置有关系,不一定是你的 makefile 不行。
#11
lucky5635912011-01-31 15:48
将make文件加到环境变量中
#12
pangding2011-02-01 00:16
不知道楼主的问题解没解决?
#13
charderkk2011-02-01 20:32
回复 12楼 pangding
终于发现问题了 我一直用的 vim编辑源文件的, makefile开始用的是记事本所以不行,后来改用vim编辑makefile就可以了 ,谢谢大家
#14
pangding2011-02-01 23:39
哦,想必是 tab 缩进的问题。不用点语法感知的编辑器干起活来是很累的。
1