Tag: gnu make

对makefile的递归调用不会更新目标文件

我有一个带有递归调用的makefile。 当我第一次运行make时,会创建目标文件并将其链接得很好。 但是当我修改源文件并再次运行make时,不会重新创建对象(make表示目标是最新的)。 我需要运行make clean然后运行make。 这是我的makefile的简化版本,我认为包括所有相关信息: PCC = mpicc #Locations OBJDIR = ./objects #Compiler and linker flags FLAGS = -g -lm #Object files SHAREDOBJS = $(addprefix $(OBJDIR)/,shared1.o shared2.o) SPECIFICOBJS = $(addprefix $(OBJDIR)/,specific1.o specific2.o) #How to compile and link $(OBJDIR)/%.o: %.c $(PCC) -c $*.c $(EXTRA_FLAGS) -o $(OBJDIR)/$*.o PROGNAME: $(MAKE) $(MAKEFLAGS) EXTRA_FLAGS=”$(FLAGS)” PROGNAME_TARGET PROGNAME_TARGET: $(SHAREDOBJS) $(SPECIFICOBJS) $(PCC) […]

如何编写makefile来生成目标文件和可执行文件在不同的目录中?

现在继续我需要更改现有Makefile的表示。 目前我正在使用: ~/Linuz/src: 1.c, 2.c, 3.c … ~/Linuz/inc: abc.h, xyz.h 和makefile在: ~/Linuz/some_other_dir/ 但需要改变结构。 想要从( ~/Linuz/src/和~/linuz/inc )创建一个库 库将用于获取可执行文件。 应用程序源文件(.c文件)位于~/Linuz/app/ ~/Linuz/bin/应该在编译期间创建,以存储所有目标文件和可执行文件。 有什么建议 ?? 我的makefile看起来像这样: all: Library.a %.o: ../src/%.c $(CC) $(CFLAGS) -I../inc/ -c -o $@ $^ Library.a: $(SRC_DIR)/1.c $(SRC_DIR)/2.c $(SRC_DIR)/3.c $(SRC_DIR)/4.c $(SRC_DIR)/5.c $(CC) $(LDFLAGS) -o $@ $^ all: prog %.o: ./*.c $(CC) $(CFLAGS) -ILibrary.a -c -o $@ $^ […]

如果从shell运行,则完全相同的命令行会在Make中生成错误但仍然成功

我有一个问题,我无法绕过头脑。 我有一个最小的示例makefile,它应该将一个非常简单的.c文件编译成可执行程序。 当我运行make时 ,编译器开始编译然后生成错误消息 “T:\ printOffsets.c:10:21:错误:bootIfc.h:没有这样的文件或目录” 然后我复制完全相同的命令行make is用于构建目标并直接在同一个Windows命令shell实例中运行它,突然编译成功而没有错误! 命令行是(路径名简化): T:\ perl \ c \ bin \ gcc.exe T:\ printOffsets.c -IT:\ include \ -o D:\ printOffsets.exe 我怎么知道? 好吧, make在执行它之前打印命令行,所以我只需从shell复制并粘贴。 我不明白! 这怎么可能?? 如果在Makefile中启动,那么完全相同的命令如何在shell上工作并失败? 顺便说一下,我在Windows 7上使用GNU Make 3.82。

如何在使用gnu-make链接静态库时遵循链接顺序?

我有以下问题: cc -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG build/liblcthw.a tests/list_tests.c -o tests/list_tests /tmp/ccpvGjZp.o: In function `test_create’: ~/lcthw/tests/list_tests.c:12: undefined reference to `List_create’ collect2: ld returned 1 exit status make: *** [tests/list_tests] Error 1 但 cc -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG tests/list_tests.c build/liblcthw.a -o tests/list_tests 运行得很好, nm显示预期的内容,测试运行,每个人都很高兴,等等。 我搜索了SO并找到了很多答案(例如链接器命令 – GCC ),所以很清楚链接器的工作原理应该如此。 那么,我应该如何修改我的makefile以遵循命令呢? 到目前为止,这是Makefile: CFLAGS=-g […]

为什么这个makefile在’make clean’上执行目标

这是我目前的makefile。 CXX = g++ CXXFLAGS = -Wall -O3 LDFLAGS = TARGET = testcpp SRCS = main.cpp object.cpp foo.cpp OBJS = $(SRCS:.cpp=.o) DEPS = $(SRCS:.cpp=.d) .PHONY: clean all all: $(TARGET) $(TARGET): $(OBJS) $(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) -o $(TARGET) .cpp.o: $(CXX) $(CXXFLAGS) -c $< -o $@ %.d: %.cpp $(CXX) -M $(CXXFLAGS) $ $@ clean: rm -f $(OBJS) […]

如何编写单个makefile,c文件在src和h文件是否在inc文件夹中?

我正在尝试编写一个makefile,它应该从src /中选择来自inc /的头文件 〜/ Linuz / src:1.c,2.c,3.c …… 〜/ Linuz / inc:abc.h,dyz.h 请帮我创建一个应该可用的makefile 〜/ Linuz / some_other_dir /生成文件 PS:试图为我的linux机器编译它。 谢谢你的建议。

GNU Make –output-sync不起作用?

这让我疯狂。 对于并行make build(-j),您应该能够同步控制台输出。 这是ref: GNU Make Manual:5.4.1并行执行期间的输出 我正在使用GNU Make 3.82 for x86_64-redhat-linux-gnu 不同步的: make -j8 all //not synchronized 产量(我在这里使用eclipse-cdt managedbuild): Building file: ../dome.c Building file: ../main.c Invoking: GCC C Compiler gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF”dome.d” -MT”dome.d” -o “dome.o” “../dome.c” Invoking: GCC C Compiler gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP […]

用于GNU make的Backtrace

有没有办法让GNU make打印导致命令在失败时执行的目标的“回溯”? 我经常处理严重混淆的makefile,同时解决在新系统上构建软件的可移植性问题,看起来这应该是一个非常简单的事情,make会大大有助于调试,但我找不到任何方式来请求它。 我想看到的是: gcc: error: … make[2]: error: gcc … make[2]: error building target bar make[2]: error building dependency bar for target foo make[1]: error: make -C subdir make[1]: error building target subdir make[1]: error building dependency subdir for target all … 显示失败命令最终执行的整个依赖路径。 有没有办法做到这一点?

GNU在gcc调用后生成“Abort trap:6”但是单独执行时调用有效

我正在使用GNU Make来构建一个很多人都会使用的C / C ++项目。 makefile尝试通用,因为此项目中有许多可选文件,每个用户通过MATLAB接口选择这些文件,然后通过命令行参数提供给makefile(make target OPTS =’XYZ’等…)。 当我使用makefile时,它正确识别正确的对象依赖项,然后继续查找这些对象的源先决条件并构建它们。 但是,每次尝试执行对象规则时,我都会在gcc调用之后收到错误消息“Abort trap:6”。 Makefile如下 vpath %.c $(PATH) $(OBJ_DIR) # Pick compilers CC1=g++ CC2=gcc LNK=g++ # Assign variables for c/cpp implicit rules CXXFLAGS= $(CCFLAGS) $(DEFINES) $(INCLUDES) CFLAGS = $(CCFLAGS) $(DEFINES) $(INCLUDES) # Assign various user-defined values OUTPUT = -o $(USER_LIB) C_OBJECTS = $(patsubst %.c,$(OBJ_DIR)/%.o,$(C_SOURCES)) CPP_OBJECTS = $(patsubst […]

makefile出错(“无输入文件”)

这是我第一次制作makefile,我真的很想了解这个过程。 我正在尝试为C ++项目创建一个非常简单的makefile,其结构如下: 根文件夹 生成文件 自述 src文件夹 ……这里的源文件…… 包含文件夹 …这里有外部库的头文件… lib文件夹 …这里的外部lib文件… bin文件夹 …构建可执行文件的输出目录… obj文件夹 …这里的目标文件…… 我在这里按照教程。 这是我的makefile: IDIR=include . CC=g++ CFLAGS=-I$(IDIR) ODIR=bin/obj LDIR=lib LIBS=none SRC=src _DEPS=hello.h DEPS=$(patsubst %,$(IDIR)/,%(_DEPS)) _OBJ=file1.o file2.o OBJ=$(patsubst %,$(ODIR)/%,$(_OBJ)) $(ODIR)/%.o: $(SRC)/%.cpp $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) # $(LIBS) test_proj: $(OBJ) $(CC) -o $@ $^ $(CFLAGS) .PHONY: clean clean: rm […]