Linux下在terminal运行c++程序的问题。用gcc编译器
已经知道对单独的cpp文件。在终端输入g++filename-ofilename就可以生成.o的文件。那么对已经写好的一个程序,包含多个源文件的应该如何运行?比如一个随机...
已经知道对单独的cpp文件。在终端输入g++ filename -o filename就可以生成.o的文件。那么对已经写好的一个程序,包含多个源文件的应该如何运行?比如一个随机数类,有random.cpp random.h test.cpp这3个文件
展开
4个回答
展开全部
多源文件的编译方法
如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]
1. 多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。
如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]
1. 多个文件一起编译
用法:#gcc testfun.c test.c -o test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2. 分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc -c testfun.c //将testfun.c编译成testfun.o
#gcc -c test.c //将test.c编译成test.o
#gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。
参考资料: http://www.cppblog.com/liangyi/archive/2008/04/02/45986.aspx?opt=admin
展开全部
写个Makefile,内容如下:
all: test
test: random.o test.o
random.o: random.h # 假设random.h内容被random.cpp用到
就可以了,如果g++在PATH变量下面,就可以直接打make来编译了。一般对于多个文件的程序,都会选用类似make、scons这些构建工具来简化编译过程的,甚至还会用autotools来简化Makefile的编写。
all: test
test: random.o test.o
random.o: random.h # 假设random.h内容被random.cpp用到
就可以了,如果g++在PATH变量下面,就可以直接打make来编译了。一般对于多个文件的程序,都会选用类似make、scons这些构建工具来简化编译过程的,甚至还会用autotools来简化Makefile的编写。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
比较好的方法是使用makefile. 首先安装make工具, 运行make -v, 如果正常返回版本信息就说明已经装好了。
然后在代码的目录里新建一个名为makefile的文本文件, 内容:
# makefile for test
all: test
CC=g++
test: test.o random.o
$(CC) test.o random.o -o test
random.o: random.cpp random.h
$(CC) -c random.cpp
test.o: test.cpp
$(CC) -c test.cpp
clean:
rm -rf test *.o
# end of makefile
然后在代码目录运行make就自动编译了。 make会自己检测源文件的时间戳,在最后一次编译之后修改过的项目才会被再次编译。
运行make clean, 就可以把编译生成的文件全部清除。
然后在代码的目录里新建一个名为makefile的文本文件, 内容:
# makefile for test
all: test
CC=g++
test: test.o random.o
$(CC) test.o random.o -o test
random.o: random.cpp random.h
$(CC) -c random.cpp
test.o: test.cpp
$(CC) -c test.cpp
clean:
rm -rf test *.o
# end of makefile
然后在代码目录运行make就自动编译了。 make会自己检测源文件的时间戳,在最后一次编译之后修改过的项目才会被再次编译。
运行make clean, 就可以把编译生成的文件全部清除。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
g++ random.cpp test.cpp -o
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询