小编Eld*_*mov的帖子

makefile 调用自身

当一个 makefile 调用自己时

test : 
    @ mv $(BIN_SRC) $(BIN_SCR_TMP)
    @ mv $(BIN_TEST_SRC) $(BIN_TEST_SRC_TMP)
    @ make runtest
    @ mv $(BIN_SCR_TMP) $(BIN_SRC)
    @ mv $(BIN_TEST_SRC_TMP) $(BIN_TEST_SRC)

runtest : $(OBJS) $(LIB)
    g++ -o $(TEST_BIN_FILE) $(OBJS) $(LIB)
    @ chmod ugo+x $(TEST_BIN_FILE)
    $(TEST_BIN_FILE)
Run Code Online (Sandbox Code Playgroud)

然后运行make test它会将其打印到终端:

make test

make[1]: Entering directory `/users/home2/admin/stringha/cs240/webcrawler'
g++ -o bin/webcrawler-tests  obj/URL.o  obj/webcrawler-tests.o lib/libcs240utils.a bin/webcrawler-tests
Hello webcrawler test!
make[1]: Leaving directory `/users/home2/admin/stringha/cs240/webcrawler'
Run Code Online (Sandbox Code Playgroud)

我想知道如何使它不打印出线条

make[1]: Entering directory `/users/home2/admin/stringha/cs240/webcrawler'
Run Code Online (Sandbox Code Playgroud)

make[1]: Leaving directory `/users/home2/admin/stringha/cs240/webcrawler'
Run Code Online (Sandbox Code Playgroud)

谢谢!

makefile

5
推荐指数
2
解决办法
2649
查看次数

Makefile变量替换显然没有完成,即使:=在声明中使用

我有一个主内核模块,其他内核模块与之通信.我已经构建了这样的模块(概念上):

main module/
           |
            \drivers/
                    |
                    |\driver1
                    |\driver2
                     \driver3
Run Code Online (Sandbox Code Playgroud)

由于这些是内核模块,我需要像这样编译它们:

make -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
Run Code Online (Sandbox Code Playgroud)

但是,由于可以从以前的目录调用驱动程序的Makefile,我需要$(shell pwd)在调用其他make之前执行(linux的make).所以Makefile现在看起来像这样:

CURRENT_DIR := $(shell pwd)

.PHONY: all
all:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(CURRENT_DIR) modules
Run Code Online (Sandbox Code Playgroud)

到目前为止它很好,它完美地工作.问题是:我有一个驱动程序需要包含的文件,所以我必须给出包含路径.我第一次尝试

EXTRA_CFLAGS += -I../..
Run Code Online (Sandbox Code Playgroud)

并立即明白为什么它不起作用(相对路径将是/ lib/module/...不是当前目录).所以我改成了:

MAIN_MODULE_HOME := $(CURRENT_DIR)/../..
EXTRA_CFLAGS += -I$(MAIN_MODULE_HOME)
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这不起作用!如果我写

EXTRA_CFLAGS += -Ipath/I/get/from/pwd/../..
Run Code Online (Sandbox Code Playgroud)

手动,它编译!谁能解释我做错了什么?在调用make之前,我echo编辑$(CURRENT_DIR)并且$(MAIN_MODULE_HOME)变量是有意义的.

我知道,EXTRA_CFLAGS是不是马上进行评估,但由于CURRENT_DIRMAIN_MODULE_HOME与声明:=我不明白事情是如何得到搞砸.

(如果有人能更好地说出问题标题,请做!)

linux variables makefile kbuild

4
推荐指数
1
解决办法
2601
查看次数

For GNU Makefile中的循环 - 将所有目标文件收集到一个Mutliple目录中的变量中

我希望通过这个小脚本总结出我想要实现的目标.

DIRS = dir1 dir2 dir3 dir4 ...
OBJS =

all: GENERATE_OBJECT_FILES

GENERATE_OBJECT_FILES: 
        for curr_dir in $(DIRS); \
        do \
                $(join $(OBJS), `ls $${curr_dir}/*.o`); \
        done

        echo $(OBJS);
Run Code Online (Sandbox Code Playgroud)

如何使用Makefile中的脚本完成此操作?

makefile gnu-make

4
推荐指数
2
解决办法
1万
查看次数

makefile notdir 命令

我的源文件不在我需要做的一个目录中 ../ 或 ../../ 东西。

之后,我需要更改源文件名,例如: ../ex/test.c to obj/test.o

用这个: 命令:

$(OBJDIR) $(notdir $(SOURCECODE:.c=.o))
Run Code Online (Sandbox Code Playgroud)

然而,只有$(SOURCECODE)( ../ex/test.c) 中的第一个文件名被正确重命名为 obj/test.o,其余的看起来都像*.o,没有目录信息。

makefile gnu-make

3
推荐指数
2
解决办法
6207
查看次数

请参阅Makefile中的shell脚本输出

如何在Makefile中构建目标之前执行shell脚本,并在运行时查看输出?

我有一个调用的脚本prepare.sh生成一堆.pyx文件..pyx文件是我的构建过程涉及make的起点.它来自.pyx - > .c - > .o - > .so

我不喜欢在make之前单独运行prepare.sh.我想让它为我运行它.

我让它工作,但我没有看到命令的输出.我想看看它.这就是我现在拥有的:

PATH := ${PYTHONHOME}/bin:${PATH}

NOTHING:=$(shell ./prepare.sh)

PYXS?=$(wildcard merged/*.pyx)
SOURCES=$(PYXS:.pyx=.c)
OBJECTS=$(SOURCES:.c=.o)
SOBJECTS=$(OBJECTS:.o=.so)
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

3
推荐指数
1
解决办法
1849
查看次数

Android.mk语法问题

我遇到了一个简单的问题.

这是我的Android.mk:

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := libandroidgameengine
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include/ \
                    $(LOCAL_PATH)/../interface/ \
                    $(LOCAL_PATH)/../include/Render \
                    $(LOCAL_PATH)/../include/Utils

LOCAL_SRC_FILES :=  # Core
                    ../src/Engine.cpp \

                    # Rendering
                    ../src/Render/RenderManagerImpl.cpp \

                    # Utils
                    ../src/Utils/LogManagerImpl.cpp \

                    # Memory
                    ../src/Memory/MemoryManagerImpl.cpp \
                    ../src/Memory/malloc.c

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)
LOCAL_CFLAGS := -DSTRUCT_MALLINFO_DECLARED
LOCAL_LDLIBS    := -lGLESv2 -llog
Run Code Online (Sandbox Code Playgroud)

我一直得到"Android.mk:11 *命令在第一个目标之前开始"错误.我知道它与我构造源文件的方式有关(使用主题标签来表示引擎的特定部分)但我不明白它实际上应该是什么样子.任何提示?包含$(BUILD_STATIC_LIBRARY)

makefile android-ndk

2
推荐指数
1
解决办法
7264
查看次数

makefile问题(gnuplot)

我正在尝试使用带有makefile的GNUplot生成一些图形.我希望目录中的每个*.plt文件都可以通过GNUplot运行,但是我看不到让它工作.到目前为止,这是我的makefile:

all: %.tex
%.tex: %.plt
<tab> gnuplot < $<
Run Code Online (Sandbox Code Playgroud)

如果我单独指定一个.plt文件,配方工作正常,但我希望它在我生成它们时拾取我的新图.

编辑:我想我现在已经开始工作了:

# plots all files in the folder with .plt extensions
SOURCES = $(wildcard *.plt)
TARGETS = $(SOURCES:.plt=.tex)

all: $(TARGETS)

%.tex: %.plt
    gnuplot < $<
Run Code Online (Sandbox Code Playgroud)

有人可以确认我的推理(如下)是否正确?以前我没有指定任何文件all(我有点困惑%).现在SOURCES通过使用通配符拾取任何.plt文件来分配变量(为什么在使用.plt而不是*.plt?时它不起作用).分配后SOURCE,设置TARGETS变量,现在all:指定要构建的文件.现在运行匹配规则.

makefile gnuplot

1
推荐指数
1
解决办法
1467
查看次数

标签 统计

makefile ×7

gnu-make ×3

android-ndk ×1

gnuplot ×1

kbuild ×1

linux ×1

variables ×1