make编译
① make会把所有的代码都重新编译吗
make程序实际上是对makefile文件进行解析和执行。
需要编译的文件,引用的头文件,库等都需要在makefile文件中进行标识。
make程序会根据makefile的内容进行编译。
所以make并不一定编译所有的代码。需要查看makefile文件中定义了哪些文件需要进行编译。
② make 重新编译
make clean先
③ make是linux的自带的还是需要安装编译器才有make功能
make程序不是Linux系统自带的,也不是编译器带的,不要按照IDE的概念去理解(Windows下面的IDE一安装什么工具都有了),make工具是需要另外安装的。
比如说我的Linux系统上,当时搭建开发环境时是这样安装的:(我的系统是Fedora,所以用的yum)
yum install make gcc gcc-c++
看,编译器和make是分开安装的哈。
make工具是需要makefile的时候才用,而makefile是多个源文件的时候才有,如果你编译一个helloworld程序,直接用gcc或g++编译就可以了,从这点来看,也没理由把make和编译器捆绑在一起。
④ linux下编译程序源码,执行make命令时报错如图,有没有什么头绪或者建议,谢谢大神了
linux下所有软件源码包的安装方式一般都会在readme中有详细的官方说明,对于gerbv如下图所示
上述大部分内容对linux下所有软件包的安装都适用。
⑤ 这句linux下的make编译怎么用啊(sudo make那是什么意思)
makefile? 在当前目录写个makefile文件然后执行命令make就行了
⑥ 如何运行make
最近试了一下php7,在编译和支持Mysql上都遇到一些问题,相信不少同学也同样遇到,所以在这里聊一下这个过程。简单来讲编译PHP7只需要3步: 1、./buildconf --force 2、./configure 3、make && make install 1、3步,都没啥好管的,configure是编译的关键,涉及到PHP对一些库的支持,这里我们使用最小的支持,包括MySQL: curl gd fpm mysqlnd 之所以把curl和gd拿来说,目的是要搞清楚,这些三方库在编译PHP之前得安装好,可以直接使用yum安装在默认位置,也可以编译安装到指定位置,yum安装后,编译时不用指定库的安装位置,关于安装这些库,可以搜索一下有很多。下面看看基本的configure ./configure --prefix=/apps/php/php7.0 --enable-mbstring --with-curl --with-gd --with-config-file-path=/apps/php/php7.0/etc/ -- enable-fpm --enable-mysqlnd --with-pdo-mysql=mysqlnd PHP-FPM 关于fpm,相信不用多说,用它来支持PHP是一个比较好的选择,PHP5.3.3开始就已经内置了php-fpm,所以PHP7里当然也有,只需要--enable-fpm一下就可以了 php-fpm参数: --start 启动 --stop 强制终止 --quit 平滑终止 --restart 重启 --reload 重新平滑加载php的php.ini --logrotate 重新启用log文件 MySQL支持 重点讲一下这个,因为在它上面花了一点时间,不知道从哪一版本开始,PHP不在希望使用mysql的库来支持mysql的连接,启用了mysqlnd来支持,听说比libmysql要快很多,PHP5.x还可以使用libmysql,PHP7貌似已经取消了支持,编译都没有了--with-mysql参数,只支持--with-mysqli和--with-pdo-mysql,可以通过查看configure的参数来知道: ? 1 ./configure -help grep mysql 可以看到,PHP希望使用mysqlnd来支持MySQL,所以参数可以这样写: --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd mysqlnd是不需要mysql支持的,所以不用先安装好mysql一样可以编译通过,启动php-fpm,查看一下phpinfo,能看到mysqlnd和pdo_mysql表示php已经可以支持mysql了(这里用的是pdo,mysqli同理) 几个问题 编译问题:cc: Internal error: Killed (program cc1) 这个问题是第一次遇到,原来是我的阿里云服务器关掉了swap,内存不够用,就报了这个错。 解决办法很简单,configure时加上--disable-fileinfo参数就可以了。 PHP报找不到mysql服务 正如它所说,确实没找到,看看phpinfo中pdo_mysql.default_socket项 mysql.sock在哪里,再看一下mysql.sock的真正位置,使用命令:ps -efgrep mysql查看: 明显不在一个位置上,我的正确位置是:/var/lib/mysql/mysql.sock 所以,修改一下php.ini,找到pdo_mysql.default_socket,改为你的实际位置,重启一下php-fpm,很不幸,虽然php.ini有这个配置,修改后,竟然不行,最好是编译的时候,指定mysql.socket的位置: ? 1 --with-mysql-sock=/var/lib/mysql/mysql.sock 如果还不行,可以到/tmp目录下建立一个mysql.sock的软链接: ? 1 ln -s /var/lib/mysql/mysql.sock mysql.sock 再重启一次php-fpm,相信已经正常运行了。如果需要PHP支持的库更多,可以再次编译,在configure时把需要的支持加上,就是--with-xxx这中,记得如果是三方的,要先安装这些库才行哦。
⑦ linux下的make是什么,它是不是调用另外的编译器
在 Unix 上写程式的人大概都碰过 Makefile,尤其是用 C 来开发程序的人。用 make来开发和编译程式的确很方便,可是要写出一个 Makefile就不简单了。偏偏介绍 Makefile 的文件不多,GNU Make 那份印出来要几百页的文件,光看完 Overview 就快阵亡了,难怪许多
人闻 Unix 色变。
本文将介绍如何利用 GNU Autoconf 及 Automake 这两套软体来协助我们‘自动’产生 Makefile 档,并且让开发出来的软体可以像 Apache, MySQL 和常见的 GNU 软体一样,只要会 ``./configure'', ``make'', ``make install'' 就可以把程式安装到系统中。如果您有
心开发 Open Source 的软体,或只是想在 Unix 系统下写写程式。希望这份介绍文件能帮助您轻松地进入 Unix Programming 的殿堂。
1. 简介
Makefile 基本上就是‘目标’(target), ‘关连’(dependencies) 和‘动作’三者所组成的一连串规则。而 make 就会根据 Makefile 的规则来决定如何编译 (compile) 和连结 (link) 程式。实际上,make 可做的不只是编译和连结程式,例如 FreeBSD 的 port collect
ion 中, Makefile 还可以做到自动下载原始程式套件,解压缩 (extract) ,修补 (patch),设定,然后编译,安装至系统中。
Makefile 基本构造虽然简单,但是妥善运用这些规则就也可以变出许多不同的花招。却也因此,许多刚开始学习写 Makefile 时会感到没有规范可循,每个人写出来的 Makefile 长得都不太一样,不知道从何下手,而且常常会受限于自己的开发环境,只要环境变数不同或路
径改一下,可能Makefile 就得跟着修改。虽然有 GNU Makefile Conventions (GNU Makefile 惯例) 订出一些使用 GNU 程式设计时撰写 Makefile 的一些标准和规范,但是内容很长而且很复杂, 并且经常做些调整,为了减轻程式设计师维护 Makefile 的负担,因此有了Automake。
程式设计师只需写一些预先定义好的巨集 (macro),交给 Automake 处理后会产生一个可供Autoconf 使用的 Makefile.in 档。再配合利用Autoconf 产生的自动设定档 configure即可产生一份符合 GNU Makefile惯例的 Makeifle 了。
详细内容看这里
⑧ 系统编译:如何给Make命令来传递参数
但有时候我们还是需要让make命令带入些参数给makefile脚本 比如你在代码里面需要定义个宏DEBUG来打开调试开关代码如下:{i=9;#def DEBUGi=1;#i=0;#endprf("i=%d\n", i);0;} 般来说这个宏定义可以通过直接修改源代码进行但这样显然不是很好办法 另外个办法是通过makefile修改比如: CFLAGS=-g -Wall -DDEBUG object=myprog all:$objectmyprog:a.c gcc ${CFLAGS} a.c -o ${object} 如果更进步连makefile都不想修改我们可以通过向make命令传递参数来进行为此我们需要适当修改makefile如下: CFLAGS=CFLAG CFLAGS-g -Wall -DDEBUG object=myprog all:$objectmyprog:a.c gcc ${CFLAGS} a.c -o ${object} 此时如果想打开DEBUG宏我们可以这样输入make命令: [ychq@ICM3-2 net]$ make CFLAG=-DDEBUG gcc -g -Wall -DDEBUG a.c a.c: In function `': a.c:9: warning: implicit declaration of function `prf' [ychq@ICM3-2 net]$ 我们可以发现DEBUG宏已经被正确传入 更进步我们可以通过传递区别参数给make让make编译区别模块
⑨ Makefile.XX文件如何用make来编译
1. 通过-f选项指定make的文件。
make -f Makefile.xx
2. (同楼上)把Makefile.xx文件修改为Makefile或makefile
⑩ linux用make语句编译
$ cat makefile
.SUFFEXES:.c .o
.c.o:
gcc -Wall -c $<
OBJS=my_file.o
all: my_exec_file
my_exec_file:$(OBJS)
gcc -Wall $(OBJS) -o $@
$ make
gcc -Wall -c my_file.c
gcc -Wall my_file.o -o my_exec_file
简单说明:
.SUFFEXES:.c .o :告诉make识别哪些源程序和目标程序
.c.o: :告诉make命令.c程序如何生成.o文件,采用其下的gcc -Wall -c $<($<代表任意一个编译时用到的.c文件)命令。
all: my_exec_file :告诉make命令自动生成哪个可执行程序
my_exec_file:$(OBJS) :告诉make命令如何生成my_exec_file文件,需要哪些目标代码($(OBJS)),采用其下的命令: gcc -Wall $(OBJS) -o $@ ($@代表my_exec_file,即要编译的可执行文件名)