linux cmake案例解释

原文:http://linoxide.com/how-tos/linux-make-command-examples/


###################################################


Linux中make工具的案例解析


make命令是Linux中使用最频繁的命令之一。它可以帮助管理员使用命令行就可以编译安装许多开源组件,程序员也可以通过使用它完成对大型复杂工程的管理。本文中,我们会通过几个实际的例子来说明make命令的用法。


make命令如何工作?

对于不了解的人来说,make命令会把目标作为命令行参数。其实,这些目标都指定在一个Makefile文件中,其包含了对于相应目标的对应动作。

当make命令被第一次执行时,它会浏览Makefile文件,寻找提供给它的第一个目标作为最终目标,然后读取目标的依赖。如果这些依赖也是目标,那么make命令会浏览这些目标所在的位置并构建依赖。一旦最终目标的依赖都已存在,那么接下来就会构建目标,结束命令。

现在,假设你修改了其中的一个源文件,再次执行make命令,它仅仅会编译那个源文件对应的对象文件,因此在编译最后可执行文件的过程中可以节省很多的时间。


案例

我的测试运行环境:

OS -> Ubuntu 14.04

Shell -> GNU bash(4.3.11)

Application -> GNU Make 3.81


##################################


工程的全部文件如下:



anotherTest.c:

#include "test.h"

int main()
{
	print_test();

	return 0;
}

test.c:

#include "test.h"

void print_test()
{
	printf("print test!!!\n");
}


test.h:

#ifndef TEST_H_
#define TEST_H_

#include <stdio.h>
#include <stdlib.h>

void print_test();

#endif


Makefile:

all:test

test:test.o anotherTest.o
	gcc -Wall test.o anotherTest.o -o test

test.o: test.c
	gcc -c -Wall test.c

anotherTest.o:anotherTest.c
	gcc -c -Wall anotherTest.c

clean:
	rm -rf *.o test


接下来是Linux下make命令的一些用法


1.最简单的开始

编译这个工程,你不仅可以单单使用"make"命令,还可以将目标“all”作为make命令的参数:


linux cmake案例解释_第1张图片


从上面可以看出,make命令首先构建依赖,然后构建最终的目标。

现在,不仅生成了可执行文件(最终目标),还有.o文件(依赖)


简单修改test.c:

#include "test.h"

void print_test()
{
    printf("print test!!!\n");
    printf("a little alter\n");
}

在此执行make命令:

linux cmake案例解释_第2张图片

此时你会发现,仅有修改过的test.c文件被重新编译


想要清楚所有生成的.o文件和可执行文件,只需要执行make clean命令即可:

linux cmake案例解释_第3张图片


2.强制每次均make所有目标

现在,你应该已经意识到make命令并不会重新编译没有修改过的文件。但如果你想要改变这个默认的行为,只需要在make命令后加上-B选项:

linux cmake案例解释_第4张图片

"make -B"命令会强制编译所有文件


3.打印调试信息

如果你想要了解make命令在执行时的详细信息,可以加上-d选项:

linux cmake案例解释_第5张图片

由于输出过于庞大,你可以使用more命令,这样就可以一页一页的浏览。


4.改变编译目录

如果你想要编译的工程并不在当前目录,使用-C选项可以改变make命令的执行路径:

linux cmake案例解释_第6张图片

当你使用-C选项指定了执行路径后,make命令就进入你指定的路径进行编译,它首先会寻找Makefile文件,如果找到,则继续,完成后退出,否则,直接退出:



5.将其他文件作为Makefile文件使用

有时后,你想要将Makefile改名为其他名字,并且想要make命令将改名后的文件想默认的"Makefile"文件一样对待,使用-f选项可以实现这一目标:

linux cmake案例解释_第7张图片

你可能感兴趣的:(linux,Make)