【linux之Makefile 编写、规则、伪目标、变量】教程文章相关的互联网学习教程文章

linux – 我在哪里可以找到关于MAKEFILE编写的教程?

我需要写一些MAKEFILE,但对它们一无所知.有人请发布一些关于如何创建这些精彩文件的教程链接吗?我想从头开始学习MAKEFILE的基础知识……解决方法:http://www.google.com/search?q=makefile+tutorial http://www.gnu.org/software/make/manual/make.html http://mrbook.org/blog/tutorials/make/ http://www.opussoftware.com/tutorial/TutMakefile.htm http://www.cs.indiana.edu/classes/c304/Makefiles.html http://www.cs.duke...

linux – 如何在makefile中仅在特定目标上使用.NOTPARALLEL?【代码】

我在Makefile中有5个标签:all: label1 label2 label3 label4 last_label我希望last_label最后完成,我想使用make -j.如果我使用.NOTPARALLEL,它会使所有这些都是NOTPARALLEL,有关如何做的任何建议吗?解决方法:创建一个目标,指定可以并行执行的四个目标.在所有目标中包含this和last_label:intermediate: label1 label2 label3 label4all:$(MAKE) intermediate$(MAKE) last_label这将并行执行中间内指定的目标,但中间和last_label将...

linux – 在qmake(5.0)生成的Makefile中设置LINK变量【代码】

我正在使用qmake生成一个Makefile.在我的spec文件中,我重写了CXX和CC:QMAKE_CC=/home/foo/gcc-4.7.2/bin/gcc QMAKE_CXX=/home/foo/gcc-4.7.2/bin/g++现在生成的Makefile使用这些版本.但是在生成的makefile中有一个名为LINK的变量,它指向g.不是/home/foo/gcc-4.7.2/bin/g. 当从所有生成的目标文件编译可执行文件时,这会导致我的构建在最后一步失败. 如何让qmake在生成的Makefile中将LINK设置为/home/foo/gcc-4.7.2/bin/g? 目前,我...

linux – 如果Makefile包含“include”,如何获取“完整”makefile?【代码】

如果makefile包含“include”,是否可以获得“完整”的makefile?例如:#here is the contents of Makefileinclude inc1.iinclude inc2.iclean:rm -rf *#here is the contents of inc1.iabc:touch abc#here is the contents of inc2.idef:touch def如何在没有包含的情况下获得“完整”Makefile?因为当Makefile包含其他inc时,inc文件还包含另一个sub-inc …它很难读! 我想得到一个“完整”的makefile,如:abc:touch abcdef:touch d...

linux – Eclipse makefile构建很慢……给出了什么?【代码】

我们是狂热的Eclipse粉丝 – 太棒了!但是我们有大约40个c项目(并且正在增长),并且当所有项目都是最新的时,构建所有这些项目需要大约半分钟(总计).如果我只是创建一个在所有40个项目上执行“make all”的bash脚本,它将以不到一秒的时间执行. Eclipse似乎希望每次都执行以下命令来运行适当的工具测试:g++ -E -P -v -dD /myfolder/.metada/.plugins/org.eclipse.cdt.make.core/specs.cpp其中specs.cpp是一个空文件.这一步似乎占用了...

linux – Makefile和符号链接【代码】

我遇到了一个makefile的奇怪问题.我只是想在makefile中设置一个符号链接,但在一台机器上得到一条错误信息(Linux 2.6.18-238.12.1.el5)make: execvp: ln: Too many levels of symbolic links它在我的MacBook上完美运行.如果我在shell中执行相同的命令,它也可以正常工作.怎么可能出错?是否有任何环境变量对ln很重要?解决方法:我认为错误消息中的execvp是关键.我相信在尝试找到ln命令本身时,有太多级别的符号链接. 例:all:ln -nsf ...

linux – 如何在makefile中运行./configure脚本【代码】

我尝试过以下方法:$(shell ./libpng/configure) ./libpng/configure在这种背景下all : build_jpeg build_libpng#JPEG BUILD RULES build_jpeg :make -C ./jpeg #LIB PNG BUILD RULES build_libpng :$(shell ./libpng/configure)make -C ./libpng我能做些什么来完成这项工作?解决方法:当你执行./libpng/configure时会发生什么?确保configure脚本是可执行的! (chmod x ./libpng/configure)

linux – 不评估带百分号的Makefile规则【代码】

我正在尝试将linux内核的kconfig util移植到我的产品中 编译时我得到了下一个错误:make[6]: *** No rule to make target `zconf.tab.c', needed by `zconf.tab.o'. Stop.我在Makefile.lib中找到了此文件的下一个规则$(obj)/%: $(src)/%_shipped$(call cmd,shipped)对我来说它看起来不错,它只适用于内核但不适用于我的产品. 然后我在前一个规则之后添加了另一个规则.$(obj)/%c: $(src)/%c_shipped$(call cmd,shipped)现在它工作得...

Linux编程之Makefile(一)【代码】【图】

我刚开始学Linux的时候,并没有用Makefile。写一个test.c ,然后直接gcc -o -g test test.c。后来文件一多,各种.c .h 文件。原来的方法是没法编译的。所以这时候就要靠Makefile。 先写一个简单的例子吧。现在有一段代码#include<stdio.h>int main(int args,char *argv[]) {printf("hello,world!!");return 0; } 稍微插一段编译原理:首先你的.c到Linux可执行文件.elf 要经历的过程是:.h .c->.i->.o->elf 首先是预编译:加载头文件...

linux – 具有相对路径的Makefile?【代码】

我的Gentoo Linux上的Makefiles有问题. 这是我的文件夹层次结构:Development-> GLTools -> include -> src->Triangle ->triangle.cpp ->Makefile和我的Makefile:MAIN = triangle SRCPATH = ./ SHAREDPATH = ../GLTools/src/ SHAREDINCPATH = ../GLTools/include/ LIBDIRS = -L/usr/local/lib INCDIRS = -I/usr/include -I/usr/local/include -I/usr/include/GL \ -I$(SHAREDINCPATH) -I$(SHAREDINCPATH)GLCC = g++...

在Linux 2.6驱动程序模块makefile中创建调试目标【代码】

我正在尝试能够在命令行执行“make debug”,它将使用-DDEBUG_OUTPUT定义构建我的驱动程序模块,这将导致编译某些代码段. 在2.4内核makefile中,这很容易.我只是创建一个debug:target并在该目标的cc编译命令参数中包含“-DDEBUG_OUTPUT”.简单. 不幸的是(对我而言),2.6完全改变了模块的编译方式,我只能找到简单的“全部”和“干净”的例子,这些例子没有显示在编译时添加自定义定义. 我试过这个:debug:make -C $(KERNEL_DIR) SUBDIRS...

linux – Makefile变量替换显然没有完成,即使:=在声明中使用【代码】

我有一个主内核模块,其他内核模块与之通信.我已经构建了这样的模块(概念上):main module/|\drivers/||\driver1|\driver2\driver3由于这些是内核模块,我需要像这样编译它们:make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules但是,由于可以从以前的目录调用驱动程序的Makefile,我需要在调用其他make(linux的make)之前执行$(shell pwd).所以Makefile现在看起来像这样:CURRENT_DIR := $(shell pwd).PHONY: all ...

linux – Makefile在foreach循环中使用ifeq条件【代码】

我有很多变量叫做allow_xxx其中xxx是一个功能. 我想在makefile中创建一个包含所有允许值的变量. 这就是我尝试做的事情:allow_feat1 := 1 allow_feat2 := 1 allow_feat3 := 1 list_features := feat1 feat2 feat3allowed := $(foreach V, $(list_features), $(ifeq ($(allow_$V),1),$V))这不起作用……知道如何正确地做到这一点? 谢谢 !解决方法:没有ifeq函数这样的东西,它只是一个条件指令.使用if和filter代替:allowed := $(fo...

【ARM&Linux】Makefile基本模式【代码】【图】

《嵌入式Linux中Makefile万能写法》SRC := $(wildcard *.c) OBJ := $(patsubst %.c, %.o, $(SRC))CC = gcc CCLINK = g++ CFLAGS = -g -Wallxdma: $(OBJ)$(CCLINK) $(CFLAGS) $^ -o $@$(OBJ): %.o:%.c$(CC) $(CFLAGS) -c $^ -o $@.PHONY:clean clean:rm *.o xdma SRC := ${wildcard *.c} OBJ := ${patsubst %.c, %.o, $(SRC)}CC = arm-linux-gcc CCLINK = arm-linux-ld CFLAGS = -g -c -Wallall: $(OBJ)$(CCLINK) -Wall $^ -o main....

linux – 如何在Makefile中找到基础架构?【代码】

我想在Makefile中找到,无论我是在32位还是64位机器上运行. 是否可以从Makefile中简单地访问任何宏或环境变量? 我在网上找到了这个相关的答案:LBITS := $(shell getconf LONG_BIT) ifeq ($(LBITS),64)# do 64 bit stuff here, like set some CFLAGS else# do 32 bit stuff here endif但是,我怀疑所有系统getconf工具是否可用.解决方法:TL;博士; 如果您只需要以便携方式获取C中long类型的位数,则可以使用getconf LONG_BIT. 除此以外...