Tag: makefile

在makefile中转义

我试图在一个makefile中做到这一点,它可怕地失败: M_ARCH := $(shell g++ -dumpmachine | awk '{split($1,a,"-");print a[1]}') 你知道为什么吗? 我猜这跟逃跑有关,但是在什么地方呢?

如何在Makefile目标中使用Bash语法?

我经常发现Bash语法非常有用,例如像diff <(sort file1) <(sort file2)这样的进程replace。 是否有可能在Makefile中使用这样的Bash命令? 我在想这样的事情: file-differences: diff <(sort file1) <(sort file2) > $@ 在我的GNU Make 3.80中,由于它使用shell而不是bash来执行命令,所以会出现错误。

你如何强制makefile来重build目标

我有一个生成的文件,然后调用另一个生成文件。 由于这个makefile调用了更多的makefile,所以它并没有真正改变。 因此,它一直在考虑项目的build立和最新。 dnetdev11 ~ # make make: `release' is up to date. 我如何强制makefile重build目标? clean = $(MAKE) -f ~/xxx/xxx_compile.workspace.mak clean build = svn up ~/xxx \ $(clean) \ ~/cbp2mak/cbp2mak -C ~/xxx ~/xxx/xxx_compile.workspace \ $(MAKE) -f ~/xxx/xxx_compile.workspace.mak $(1) \ release: $(build ) debug: $(build DEBUG=1) clean: $(clean) install: cp ~/xxx/source/xxx_utility/release/xxx_util /usr/local/bin cp ~/xxx/source/xxx_utility/release/xxxcore.so /usr/local/lib 注意:删除名称以保护无辜者 编辑:最终修正版本: […]

我怎样才能让Makefile自动重build包含修改过的头文件的源文件? (在C / C ++中)

我有下面的makefile,我用它来构build一个正在处理的程序(实际上是一个内核)。 它从零开始,我正在学习这个过程,所以它不是完美的,但是我认为在这个阶段我已经足够强大,可以编写makefile了。 AS = nasm CC = gcc LD = ld TARGET = core BUILD = build SOURCES = source INCLUDE = include ASM = assembly VPATH = $(SOURCES) CFLAGS = -Wall -O -fstrength-reduce -fomit-frame-pointer -finline-functions \ -nostdinc -fno-builtin -I $(INCLUDE) ASFLAGS = -f elf #CFILES = core.c consoleio.c system.c CFILES = $(foreach dir,$(SOURCES),$(notdir $(wildcard […]

如何强制make / gcc来显示命令?

我试图debugging一个编译问题,但我似乎无法得到GCC(或者也许它是制造??)向我展示它正在执行的实际编译器和链接器命令。 这是我看到的输出: CCLD libvirt_parthelper libvirt_parthelper-parthelper.o: In function `main': /root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:102: undefined reference to `ped_device_get' /root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:116: undefined reference to `ped_disk_new' /root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:122: undefined reference to `ped_disk_next_partition' /root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:172: undefined reference to `ped_disk_next_partition' /root/qemu-build/libvirt-0.9.0/src/storage/parthelper.c:172: undefined reference to `ped_disk_next_partition' collect2: ld returned 1 exit status make[3]: *** [libvirt_parthelper] Error 1 我想看到的应该是这样的: $ make gcc -Wall -c -o main.o main.c gcc -Wall […]

gcc的makefile错误:“没有规则,使目标…”

我试图使用GCC(Linux)与一个生成文件来编译我的项目。 我得到以下错误,在这种情况下,似乎无法破译: "No rule to make target 'vertex.cpp', needed by 'vertex.o'. Stop." 这是makefile: a.out: vertex.o edge.o elist.o main.o vlist.o enode.o vnode.o g++ vertex.o edge.o elist.o main.o vlist.o enode.o vnode.o main.o: main.cpp main.h g++ -c main.cpp vertex.o: vertex.cpp vertex.h g++ -c vertex.cpp edge.o: edge.cpp edge.h g++ -c num.cpp vlist.o: vlist.cpp vlist.h g++ -c vlist.cpp elist.o: elist.cpp […]

crti.o文件丢失

我正在使用一个GNU工具链build立一个项目,一切工作正常,直到我连接它,连接器抱怨它缺less/找不到crti.o 这不是我的目标文件之一,它似乎与libc有关,但我不明白为什么它需要这个crti.o ,它不会使用库文件,例如libc.a ? 我正在为arm平台交叉编译。 我有工具链中的文件,但我如何让链接器包含它? crti.o是在“图书馆”的searchpath之一,但它应该寻找库path上的.o文件? gcc和ld的searchpath是否相同?

如何将对象文件放置在单独的子目录中

我尝试使用make将目标文件放置在单独的子目录中,可能是一个非常基本的技术。 我试图使用此页面中的信息: http : //www.gnu.org/software/hello/manual/make/Prerequisite-Types.html#Prerequisite-Types 我从make得到以下输出:make:***没有规则来做目标ku.h', needed by obj / kumain.o ku.h', needed by '。 停止。 然而,ku.h是一个不依赖于目标的依赖项(虽然它明显包含在c源文件中)。 当我不尝试使用目录文件的子目录(即错过了OBJDIR部分),它工作正常。 为什么认为ku.h是一个目标? 我的makefile是这样的:(风格是在阅读各种信息源之后) .SUFFIXES: .SUFFIXES: .c .o CC=gcc CPPFLAGS=-Wall LDLIBS=-lhpdf VPATH=%.c src VPATH=%.h src VPATH=%.o obj OBJDIR=obj objects= $(addprefix $(OBJDIR)/, kumain.o kudlx.o kusolvesk.o kugetpuz.o kuutils.o \ kurand.o kuASCboard.o kuPDFs.o kupuzstrings.o kugensud.o \ kushapes.o ) ku : $(objects) $(CC) […]

如何在项目上同时支持vcxproj和cmake?

我正在开发跨平台的C ++项目。 最初的想法是与msvc2010一起工作,随后在CMake和Hudson的帮助下为其他系统编译。 在演播室设置发生变化后,手动更改CMake文件似乎并不方便。 那么,最简​​单的方法是什么:为vcxproj和vcxproj.filters编写parsing器,还有另一个好的解决scheme?

在规则执行时定义makevariables

在我的GNUmakefile中,我想要一个使用临时目录的规则。 例如: out.tar: TMP := $(shell mktemp -d) echo hi $(TMP)/hi.txt tar -C $(TMP) cf $@ . rm -rf $(TMP) 如上所述,上述规则在parsing规则时创build临时目录。 这意味着,即使我一直做不出out.tar,也会创build许多临时目录。 我想避免我的/ tmp乱丢未使用的临时目录。 有什么办法可以让这个variables只在规则被触发时被定义,而不是每当它被定义的时候呢? 我的主要想法是将mktemp和tar转储到shell脚本中,但这看起来有点难看。