我有一个makefile,看起来像这样: include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS)) %-test: Something here 我了解目标规则行中的目标。 第一行中的符号是什么? 目标规则行中是否有百分比符号? 当我编写make sometarget ,makefile中的行是否不作为任何规则的一部分(如该makefile中的第一行)被执行? 如果是,那么执行的顺序是什么?
我想用makefile打印一些消息,同时执行makefile过程。 下面的一个可以打印该消息,但不会在其后执行该脚本。 我该如何解决这个问题? ifeq (yes, ${TEST}) CXXFLAGS := ${CXXFLAGS} -DDESKTOP_TEST test: @echo '************ TEST VERSION ************' else release: @echo "************ RELEASE VERSIOIN **********" endif
我想知道如何在Makefile中避免一些回显: clean: rm -fr *.o 这个规则将打印: $>make clean rm -fr *.o $> 我怎样才能避免呢?
我正在做一个项目,增长速度非常快,保持对象文件的date是没有select的。 通配符命令之外的问题存在于“我不想recursionmakefile”和“我不想让它手动列出”之间。 该对象应该进入一个单独的目录,这已经工作。 注:我不是用来制作文件,我知道的基本知识,但一切超越… 所以我的问题: 如何recursion扫描一个src文件夹,并以聪明的方式做到这一点? 我已经做了多个SRCvariables,但这是丑陋的,整个makefile越来越多的目录混乱。 我目前使用的是: OS = Linux VERSION = 0.0.1 CC = /usr/bin/gcc CFLAGS = -Wall -g -D_REENTRANT -DVERSION=\"$(VERSION)\" LDFLAGS = -lm `pkg-config –cflags gtk+-2.0` `pkg-config –libs gtk+-2.0` BUILDDIR = build SOURCEDIR = src HEADERDIR = src SOURCES = $(wildcard $(SOURCEDIR)/*.c) OBJECTS = $(patsubst $(SOURCEDIR)/%.c, $(BUILDDIR)/%.o, $(SOURCES)) NAME = cinnamon BINARY […]
我正在写一个Makefile,在一个地方做string匹配,代码是这样的: if test …; \ then \ shell scripts… \ fi ifeq ($(DIST_TYPE),nightly) shell scripts … endif 这里第一个if是shell脚本,第二个ifeq是GNU Make的条件。 但是会产生以下错误: ifeq(每晚,每晚) / bin / sh:-c:第0行:意外标记附近的语法错误`nightly,nightly' / bin / sh:-c:line 0:`ifeq(nightly,nightly)' 这里发生了什么事? Make似乎试图调用shell。 谢谢。
我怎样才能从makefile中创build一个variables,其值将是另一个数据文件的全部内容。
makefile中-I和-L标志的用法是什么?
这是一个愚蠢的问题,但是…与GNU Make: VAR = MixedCaseText LOWER_VAR = $(VAR,lc) default: @echo $(VAR) @echo $(LOWER_VAR) 在上面的例子中,将VAR内容转换为小写的正确语法是什么? 显示的语法(以及其他所有我已经运行的)导致LOWER_VAR是一个空string。
我正在尝试通过使用通用的makefile来合并一些构build信息。 我的问题是,我想从不同的子目录级别使用该生成文件,这使得工作目录值( pwd )不可预知。 例如: # Makefile.common TOP := $(shell pwd) COMPONENT_DIR := $(TOP)/component COMPONENT_INC := $(COMPONENT_DIR)/include COMPONENT_LIB := $(COMPONENT_DIR)/libcomponent.a 如果我从一个子目录中包含Makefile.common ,就像这样, $(TOP)目录是不正确的,其他的都是这样: # other_component/Makefile include ../Makefile.common # $(COMPONENT_LIB) is incorrectly other_component/component Makefile.common使用自己的目录path,而不是更多变幻的pwd ,最好的办法是什么?
$ make all命令给出错误,如rm: cannot remove '.lambda': No such file or directory所以它停止。 我希望它忽略rm-not-found-errors。 我该如何强制? Makefile文件 all: make clean make .lambda make .lambda_t make .activity make .activity_t_lambda clean: rm .lambda .lambda_t .activity .activity_t_lambda .lambda: awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda .lambda_t: paste .lambda t_year > .lambda_t .activity: awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity […]