实验七 Linux基础实验
只能是所有库成员(.o文件)名。一个文件可重复的出现在目标的依赖中,变量
“$^”只记录它的一次引用情况。就是说变量“$^”会去掉重复的依赖文件。
7)make的递归执行
make的递归过程指的是:在Makefile中使用“make”作为一个命令来执行本身
或者其它makefile文件的过程。递归调用在一个存在有多级子目录的项目中非常有用。例如,当前目录下存在一个“subdir”子目录,在这个子目录中有描述此目录编译规则的makefile文件,在执行make时需要从上层目录(当前目录)开始并完成它所有子目录的编译。那么在当前目录下可以使用这样一个规则来实现对这个子目录的编译:
CC = gcc
CFLAGS = -Wall -O -g
helloworld : $(OBJS)
虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。虚拟系统和传统的虚拟机(Parallels Desktop,Vmware,VirtualBox,Virtual pc)不同在于:虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有操作系统相同的环境,而虚拟机则可以模拟出其他种类的操作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。
#include "file2.h"
int main()
{
printf("print file1****************\n");
File2Print();
file3print();
return 0;
}
//
//file2.c
#include "file2.h"
#include <stdio.h>
重建的文件make什么也不做。
2)Makefile规则
一个简单的Makefile描述规则组成:
TARGET... : PREREQUISITES...
COMMAND
...
...
Target:规则的目标。
prerequisites:规则的依赖。生成规则目标所需要的文件名列表。通常一个目标依
赖于一个或者多个文件。
subsystem:
cd subdir && $(MAKE)
其等价于规则:
subsystem:
$(MAKE) -C subdir
对这两个规则的命令进行简单说明,规则中“$(MAKE)”是对变量“MAKE”(的引用第一个规则命令的意思是:进入子目录,然后在子目录下执行make。第二个规则使用了make的“-C”选项,同样是首先进入子目录而后再执行make。
实验七
一、实验目的
1、搭建Linux开发环境:包括安装虚拟机VMware,在虚拟机中安装Ubuntu,实现Ubuntu和主系统Windows之间的文件相互访问。
2、熟练使用Linux常用命令
3、初步了解Makefle
能够解读3个Makefile例子中所有代码,
二
PC机
三
1
1)虚拟机:虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。
名称:取单词串函数——wordlist。
功能:从字符串<text>中取从<s>开始到<e>的单词串。<s>和<e>是一个数字。
返回:返回字符串<text>中从<s>到<e>的单词字串。如果<s>比<text>中的单词数要大,那么返回空字符串。如果<e>大于<text>的单词数,那么返回从<s>开始,到<text>结束的单词串。
文档文件,也称为静态库文件),那么它代表这个文档的文件名。在多目标模式
规则中,它代表的是哪个触发规则被执行的目标文件名。
$<
规则的第一个依赖文件名。如果是一个目标文件使用隐含规则来重建,则它代表
由隐含规则加入的第一个依赖文件。
$^
规则的所有依赖文件列表,使用空格分隔。如果目标是静态库文件,它所代表的
四
1
按照实验指导书安装即可。
2
打开终端界面,输入pwd可查看当前工作目录,cd命令改变工作目录,在终端输入对应命令即可。
3
任务一:运行实例代码
Makefile:
helloworld:file1.o file2.o
gcc file1.o file2.o -o helloworld
file1.o:file1.c file2.h
VPATH = src:../headers
这样我们就为所有规则的依赖指定了两个搜索目录,“src”和“../headers”。对于规则“foo:foo.c”如果“foo.c”存在于“src”目录下,此规则等价于“foo:src:/foo.c”。
6)自动化变量
$@
表示规则的目标文件名。如果目标是一个文档文件(Linux中,一般称.a文件为
sudo chmod 765 filename
3
1)make介绍
make在执行时,需要一个命名为Makefile的文件。这个文件告诉make以何种方
式编译源代码和链接程序。典型地,可执行文件可由一些.o文件按照一定的顺序生成
或者更新。如果在你的工程中已经存在一个活着多个正确的Makefile。当对工程中的若
void File2Print()
{
printf("Print file2**********************\n");
}
//file2.h
#ifndef FILE2_H_
#define FILE2_H_
#ifdef __cplusplus
extern "C" {
#endif
void File2Print();
流行的虚拟机软件有VMware(VMWare ACE)、Virtual Box和Virtual PC,它们都能在Windows系统上虚拟出多个计算机。
2)Linux:Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
干源文件修改以后,需要根据修改来更新可执行文件或者库文件,正如前面提到的你只
需要在shell下执行“make”。make会自动根据修改情况完成源文件的对应.o文件的
更新、库文件的更新、最终的可执行程序的更新。
make通过比较对应文件(规则的目标和依赖,)的最后修改时间,来决定哪些文件需要更新、那些文件不需要更新。对需要更新的文件make就执行数据库中所记录的相应命令(在make读取Makefile以后会建立一个编译过程的描述数据库。此数据库中记录了所有各个文件之间的相互关系,以及它们的关系描述)来重建它,对于不需要
返回:函数返回被替换过后的字符串。
示例:
$(patsubst %.c,%.o,x.c.c bar.c)
把字串“x.c.cbar.c”符合模式[%.c]的单词替换成[%.o],返回结果是“x.c.obar.o”
产生一个所有以'.c'结尾的文件的列表。
$(wordlist <s>,<e>,<text> )
void file3print();
#ifdef __cplusplus
}
#endif
#endif
//file3.c
#include <stdio.h>
void file3print()
{
printf("print file3****************\n");
}
Makefile:
OBJS = file1.o file2.o file3.o
command:规则的命令行。(每个命令行前必须是一个tab字符)
3)使用变量
变量定义:immediate = deferred
使用变量:$(inmediate)
4)Makefile函数
调用格式:$(function arguments)
Function函数名,arguments参数,参数函数名空格或Tab隔开,多个参数之间用逗号隔开。
更改权限
sudochmod[u所属用户g所属组o其他用户a所有用户] [+增加权限-减少权限] [r w x]目录名
例如:有一个文件filename,权限为“-rw-r--x”,将权限值改为“-rwxrw-r-x”,用数值表示为765
sudo chmod u+x g+w o+r filename
上面的例子可以用数值表示
3)Ubutun:Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu是基于DebianGNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的。ubuntu基于linux的免费开源桌面PC操作系统,十分契合英特尔的超极本定位,支持x86、64位和ppc架构。