Articles of makefile

makefile中的$ <和$ ^有什么区别?

makefile中的隐式variables$<和$^有什么区别? 例如: $(LIBS): $(LIB_OBJS) $(CC) $(CFLAG) -shared $< -o $@ 和 $(LIBS): $(LIB_OBJS) $(CC) $(CFLAG) -shared $^ -o $@ 看来结果是一样的。 在我的情况下,我让$(LIBS)和$(LIB_OBJS)每个只有一个文件。

如何获得正确的.config文件来编译特定于我的硬件的Linux内核源代码?

我尝试使用make defconfig编译内核,但正如所料,它启动失败。 我想知道什么.config文件做内核供应商像Canonical Ubuntu的使用,内核是能够开箱即用。 当然,我还是一个初学者,configuration各种参数,目前有点不合我的。 具体来说,我正在寻找加载一个基本的“你好,世界!” 模块到我运行的内核2.6.32.41。 为此,我需要将内核源代码与运行内核所使用的相同的.config文件进行编译。

Linux内核模块编程:makefile

在学习Linux内核模块的同时,我可以看到两种方式来编写Makefile。 第一个是这样的: ifneq ($(KERNELRELEASE),) obj-m := module.o else default: $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules endif 后者不那么复杂: obj-m := module.o all: $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules makefile编译导致成功编译模块 。 我的学习伴随着LDD3书,至今我读到的是下一个: 这个makefile在典型的版本上被读取两次。 当从命令行调用makefile时,会注意到KERNELRELEASEvariables没有被设置。 它通过利用已安装模块目录中的符号链接构build指向内核构build树的事实来定位内核源代码目录。 如果你实际上没有运行正在构build的内核,你可以在命令行提供一个KERNELDIR =选项,设置KERNELDIR环境variables,或者重写在makefile中设置KERNELDIR的行。 一旦find内核源代码树,makefile会调用默认:target,它将运行第二个make命令(在makefile中参数化为$(MAKE))来调用内核构build系统,如前所述。 在第二次阅读时,makefile设置obj-m,内核makefiles负责实际构build模块。 如果makefile被读取两次,那么第二种方法应该导致recursion,不是吗?

编译Lua – 创build.so文件?

我在Centos 6.5上编译Lua 5.2.3,编译/安装正常。 但是,我还需要开发库来编译另一个程序。 我通常会这样做安装这些: yum install lua-devel 问题是,安装Lua 5.1共享库,而不是5.2.3的。 我可以从Centos的回购库中运行Lua 5.1,但如果这是一个简单的事情(知道的人)来做最新的版本,那么我会很感激有人给我指路。 对我来说,Linux makefiles仍然有点呃,你知道… 编辑 我很久以前发现这个网站 – http://lua-users.org/lists/lua-l/2006-10/msg00091.html – 它提出了对makefile的一些改变,但是当我运行它的时候我得到了这个现在: gcc -fPIC -o liblua.so -shared lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o lmathlib.o loslib.o lstrlib.o ltablib.o […]

Linux上的C ++ makefile具有多个* .cpp文件

我正在尝试使用多个文件makefile。 有人能帮我吗? 我有的文件是file1.cpp,file2.h和main.cpp file1.cpp包含我的function。 file2.h包含我的函数的声明。 main.cpp [在代码中包含file2.h] file1.cpp [在代码中包含file2.h] 我做了 all: main gcc -g -Wall -o main main.cpp 但是当我尝试编译时,却给了我大量的错误。 我的代码在日食上工作得很好。

构build一个makefile依赖/inheritance树

道歉,如果我解释这很糟糕,或者要求出血明显,但我是Linux内核的新手,有点在深处… 我们有一个embedded式Linux系统,这个系统包含一个非常糟糕的SDK,其中包含数百个文件夹,大多数文件夹包含一个rules.make,make,make.config或者一些变体,而根文件夹包含一个“master”makefile&rules.make,这意味着你可以从根文件夹中input“make sysall”,然后构build整个包。 到目前为止这样好,但试图debugging它是有点问题,因为文档会说: “ 要让内核输出debugging消息,只需定义#outputdebugmessagesplz ” 好的,但是这些东西中的一些是在“master”make / rules文件中定义的,其中一些是在子make / rules / config文件中定义的,一些是在.h文件中定义的。当然,它更好打开/closures这些东西从“顶部”make.config而不是修改个别.h文件,然后必须记得再次closures它们。 所以我认为从主“make”文件开始recursion地构build一个树,并遵循它所做的一切,定义或重新定义的所有东西,等等,但是似乎并没有一个简单的方法呢? 我假设我缺less一个“make”选项,把这个信息吐出来,或者只是makefile / config的用法。

如何在Linux中使用gcc的旧版本

在Linux中,我试图编译使用-fwritable-strings选项的东西。 显然这是一个gcc选项,在新版本的gcc中不起作用。 我在我的系统上安装了gcc-3.4,但我认为新版本仍然在使用,因为我仍然得到错误,说它无法识别命令行选项-fwritable-strings。 我怎样才能使用旧版本的gcc?

如何调用位于其他目录中的Makefile?

我正在尝试这样做: 我想从位于不同目录的shell脚本调用一个make( Makefile存在于其他目录中,可以使用abcpath)。 我该怎么做呢? 由于shell脚本不允许我进入Makefile目录并执行make ,我怎样编写shell命令(通过给Makefile执行path)来执行make ?

在Makefile安装中移动目录的最佳方法是什么?

我目前在我的Makefile中使用通常的技术来安装单个文件: install: install -D executable ${BIN_DIR} 但是我只是遇到了一个情况,我需要将整个目录及其下的所有文件移动到位。 cp -r是最好的方法,还是有更多的linux-y / unix-y方式来做到这一点?

如何针对旧版本的库进行configuration/制作/安装?

我试图安装一个软件( moddims )取决于“Imagemagick 6.3.9+” – 我试图安装ImageMagick(6.5.4-5)的最新版本,但得到了以下错误,当我试图“使“moddims: mod_dims_ops.c: In function 'dims_smart_crop_operation': mod_dims_ops.c:34: error: too few arguments to function 'ParseGravityGeometry' 据推测,函数签名在ImageMagick 6.3.9和当前版本之间有所变化。 我想尝试安装moddims对旧版本的ImageMagick – 但我想安装ImageMagick 6.3.9而不会干扰已经安装的6.5.4-5版本。 我可以使用什么./configure咒语a)安装旧版本的ImageMagick,以免覆写或干扰我的现代版本,b)编译moddims以使用旧版本? 我在OSX上,但是当我以后需要在Linux生产服务器上安装moddim时,我预计会遇到同样的问题。