2.Makefile makefile文件名称----固定;
作用:描述了整个工程的编译、链接过程,让整个软件自动化编译;
//注释:Makefile中的注释需要用#,不能用C语言中的“//”或者“/**/”
make 命令行输入make会在当前文件夹目录下自动查找Makefile文件并执行;
echo 和C语言的printf一样;
@echo Make 在执行的过程中会自动输出命令执行过程,在命令前面加上“@”的话就不会输出命令执行过程;
格式:
filename:filename.c ///////////注释:filename是输出文件,filename.c是依赖的源文件;
gcc -o filename filename.c //////////注释:执行的操作;使用这个操作生成filename文件;
clean:
rm filename //////////注释:finename为要删除的文件;在命令行输入make clean就直接只执行clean部分的操作;
1.Makefile变量:
用法:
objects = main.o input.o calcu.o
main: $(objects)
gcc -o main $(objects)
2.赋值符“=” 变量的真实值取决于它所引用的变量的最后一次有效值
3.赋值符“:=” 不会使用后面定义的变量,只能使用前面已经定义好的,
4.赋值符“?=” 如果变量 curname 前面没有被赋值,那么此变量就用后面的赋值,如果前面已经赋过值了,那么就使用前面赋的值。
5.变量追加“+=”
例子: objects = main.o inpiut.o
objects += calcu.o
//注释:一开始变量 objects 的值为“main.o input.o”,追加后变量 objects 变成了“main.o input.o calcu.o”
6.% 用法:%.c 代表所有以.c结尾的文件,a.%.o代表所有以a.开头,.c结尾的文件;
7.Makefile自动化变量:(自动化变量就是这种变量会把模式中所定义的一系列的文件自动的挨个取出,直至所有的符合模式的文件都取完,自动化变量只应该出现在规则的命令中)
$@ 规则中的目标集合,在模式规则中,如果有多个目标的话,“$@”表示匹配模式中定义的目标集合。
$% 当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件,那么其值为空。
$< 依赖文件集合中的第一个文件,如果依赖文件是以模式(即“%” )定义的,那么“$<”就是符合模式的一系列的文件集合。
$? 所有比目标新的依赖目标集合,以空格分开。
$^ 所有依赖文件的集合,使用空格分开,如果在依赖文件中有多个重复的文件,“$^”会去除重复的依赖文件,值保留一份。$+ 和“$^”类似,但是当依赖文件存在重复的话不会去除重复的依赖文件。
$* 这个变量表示目标模式中"%"及其之前的部分,如果目标是 test/a.test.c,目标模式为 a.%.c,那么“$*”就是 test/a.test。
8.Makefile伪目标
3.gcc编译:
用法:gcc [选项] [文件名]
①.c文件生成目标文件,②目标文件链接成可执行文件;
-o <输出文件名>用来指定编译结束以后的输出文件名, 默认编译出来的可执行文件名字为 a.out。
-c 只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件
-g: 添加调试信息,如果要使用调试工具(如 GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息
-O: 对程序进行优化编译 ;
-O2: 比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。
-o -c 只编译不链接;//注释:编译生成.o文件,-o后面跟的是目标文件、可执行文件
gcc -o test.o -c test.c
-o ①编译+链接;
gcc test.c -o test
②只链接;//注释:将.o文件链接成可执行文件;
gcc -o test.o test.c
///////////注释:一般都是:
test:test.o
gcc -o test test.o
test.o:test.c
gcc -o test.o -c test.c
clean:
rm test
///////////注释:因为这样是先编译生成可执行文件,然后再链接,因为如果有很多个.c文件,这样修改几个.c文件,就只需要编译这几个.c文件,对于那些没有修改的文件就不需要编译;
4.vmware-tools的安装:
最后执行VMware-install.pl文件的时候,一定要使用sudo;否则安装的不能使用;
sudo ./VMware-install.pl
如果以上方法不行,就用下面这个方法,非常好用(三个命令依次输入):
5.输入法的设置:
在设置(setting)-> 区域和语言(region language)-> 输入源 -> 管理语言;
弄好之后,桌面的右上角会出现一个键盘,把其他的输入法删除,只保留一个拼音输入发就行了;
6.Filezilla和ubuntu的文件传输----连接操作:
1.使用整点原子的操作,使用不安全的明文FTP传输;------需要ubuntu安装FTP,并打开;
如何安装FTP:
2.使用ssh传输,首先需要打开Ubuntu下的ssh,Ubuntu下安装ssh:sudo apt-get install openssh-server
开启ssh:sudo systemctl start ssh
其次,在Filezilla选择传输协议为SFTP-SSH File Transfer Protocol,最后输入Ubuntu的ip地址、用户名、用户名密码就可以连接了,这样可以成功;
7.修改Ubuntu的shell环境为bash:
查看shell环境:ls -l /bin/sh //注释:shell环境有dash 和 bash,
将shell环境修改为bash:sudo dpkg-reconfigure dash
->之后选择 否(No)
再次:ls -l /bin/sh 可以看到shell变成了bash
8. #if 0
#endif
//注释:注释内容;
第一章:
Makefile基本概念,程序编译链接基础;
第二章:
Makefile的基本规则、语法、函数使用;
第三章:
编写模拟MP3项目的Makefile;
*支持生成可执行文件、目标文件、静态库、动态库;
*支持头文件自动依赖;
*一个模块可以选择编译为:目标文件、静态库、动态库;
*支持系统头文件路径指定;
*支持第三方库(静态库、动态库)使用;
*支持库依赖自动编译;
*软件的安装与卸载;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】