常山网站建设,玩具公司网站设计论文,seo研究中心vip教程,wordpress文章分享到微信目录
编译器
多文件编译与链接
Makefile构建系统 编译器
厂商 C C
GNU gcc g
main.cpp
#include cstdioint main() {printf(Hello, world!\n);return 0;
}编译器, 是一个根据源代码生成机器码的程序
g main.cpp -o a.out调用编译器程序g, 读…目录
编译器
多文件编译与链接
Makefile构建系统 编译器
厂商 C C
GNU gcc g
main.cpp
#include cstdioint main() {printf(Hello, world!\n);return 0;
}编译器, 是一个根据源代码生成机器码的程序
g main.cpp -o a.out调用编译器程序g, 读取main.cpp中源码, 根据C标准生成相应的机器指令码, 输出到a.out可执行文件
./a.out
执行可执行文件
考究命令
objdump -D a.out | less
//将可执行文件a.out 转成汇编语言, less命令是的查看可以上下滚动
richardrich:~/workspace$ ldd a.out linux-vdso.so.1 (0x00007ffdce762000)libc.so.6 /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa4d24d1000)/lib64/ld-linux-x86-64.so.2 (0x00007fa4d2ac4000)
多文件编译与链接
hello.cpp
#include cstdiovoid hello() {printf(Hello, world\n);
} main.cpp
#include cstdiovoid hello();int main() {hello();return 0;
}
g -c hello.cpp -o hello.o
g -c main.cpp -o main.o
g hello.o main.o -o a.out
使用 -c 选项指定生成临时的对象文件再根据一系列对象文件进行链接得到最终的a.out
如果单独改动hello.cpp文件的话只需要执行
g -c hello.cpp -o hello.o
g hello.o main.o -o a.out
Makefile构建系统
make 这个程序只需写出不同文件之间的依赖关系和生成各文件的规则
特点 1. 当只更新了hello.cpp时只会重新编译hello.o, 不需要将main.o重新编译 2. 能够自动并行地发起对hello.cpp和main.cpp的编译, 加快编译速度make -j 3. 用通配符批量生成构建规则,避免针对每个.cpp和.o重复写 g 命令%.o: %.cpp 文件结构
richardrich:~/workspace$ tree
.
├── hello.cpp
├── main.cpp
└── Makefile Makefile内容
a.out: hello.o main.og hello.o main.o -o a.outhello.o: hello.cppg -c hello.cpp -o hello.omain.o: main.cppg -c main.cpp -o main.o执行make
richardrich:~/workspace$ make
g -c hello.cpp -o hello.o
g -c main.cpp -o main.o
g hello.o main.o -o a.out
无更新执行make
richardrich:~/workspace$ make
make: a.out is up to date.