Tag: makefile

如何在使用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 […]

C:使用Makefile创建静态库和链接

我试图了解静态和共享库 。 我想要执行以下操作来创建一个makefile,它将单独的编译和链接分开,以便在形成最终的静态可执行文件时创建和链接静态库。 我有Makefile的以下代码,但我收到以下错误 Makefile:13: *** missing separator. Stop. 但我也试图了解如何实际链接/创建库。 如果我在终端中的line 12之后运行它们工作的命令,而不是在makefile中。 myProgram: main.o addSorted.o freeLinks.o gcc -lm -o myProgram main.o addSorted.o freeLinks.o main.o: main.c gcc -O -c -lm main.c main.h addSorted.o: addSorted.c addSorted.h gcc -O -c -lm addSorted.c freeLinks.o: freeLinks.c freeLinks.h gcc -O -c -lm freeLinks.c ar rc libmylib.a main.o addSorted.o freeLinks.o //Error Line […]

为什么这个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并解决依赖关系?

我有一个大的源代码树,在里面的某处我有一个带有main函数的文件,我想生成一个makefile而不需要手动解析所有依赖项(包括目录和必要的c文件)。 因此,该工具需要从主文件夹开始搜索并在文件树中上下搜索,以找到与主文件“最接近”的包含文件。

如何编写单个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机器编译它。 谢谢你的建议。

更多GCC链接时间问题:对main的未定义引用

我正在为Cortex-A8处理器编写软件,我必须编写一些ARM汇编代码来访问特定的寄存器。 我正在使用gnu编译器和相关工具链,这些工具安装在带有Ubuntu的处理器板(Freescale i.MX515)上。 我使用WinSCP和PuTTY终端从我的主机PC(Windows)连接到它。 像往常一样,我开始使用一个带有main.c和functions.s的简单C项目。 我使用GCC 编译 main.c,使用as 汇编 functions.s并再次使用GCC 链接生成的目标文件,但在此过程中我得到了奇怪的错误。 一个重要发现 – 同时,我发现我的汇编代码可能有一些问题,因为当我使用命令as -o functions.o functions.s单独组装它时,尝试运行生成的函数。使用./functions.o命令,bash shell无法将此文件识别为可执行文件(在按Tab键function时。未选中/ PuTTY未突出显示该文件)。 任何人都可以建议这里发生什么? 在链接过程中,我是否需要向GCC发送任何特定选项 ? 我看到的错误是奇怪的,超出了我的理解,我不明白GCC所指的是什么。 我在这里粘贴main.c,functions.s,Makefile和错误列表的内容。 请帮忙!!! 根据人们的建议编辑makfile之后包含的最新错误 – ubuntu@ubuntu-desktop:~/Documents/Project/Others/helloworld$ make gcc -c -mcpu=cortex-a8 main.c as -mcpu=cortex-a8 -o functions.o functions.s gcc -o hello main.o functions.o functions.o: In function `_start’: (.text+0x0): multiple definition of `_start’ /usr/lib/gcc/arm-linux-gnueabi/4.3.3/../../../crt1.o:init.c:(.text+0x0): first defined […]

如何告诉编译器使用ARM的硬件浮点指令

我正在为ARM编译程序。 makefile有一个标志-msoft-float ,告诉编译器使用软件浮点仿真。 我的问题是如何在makefile中指定使用硬件浮点指令。 我试过-mhard-float ,但如果我这样做,我就会出错。 我也尝试过-msoftfp-float,因为这个网站告诉我,但编译器甚至都没有识别出那个标志。 那么,请告诉我应该如何解决这个问题。

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 […]

简单Makefile的问题:对’cos @@ GLIBC_2.2.5’符号的未定义引用

我正在尝试使用Makefile来编译一些测试C代码。 main.c文件包含两个标头: #include “circle_buffer.h” #include “window.h” 当我执行以下Makefile时 # compiler CC=gcc # compiler flags: # -g adds debugging information to the executable file # -Wall turns on most, but not all, compiler warnings CFLAGS= # include path INCLUDES = # library path and names LIBS=-L/usr/lib/x86_64-linux-gnu -lsndfile MAIN = test $(MAIN): main.o circle_buffer.o window.o $(CC) main.o circle_buffer.o […]

用于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 … 显示失败命令最终执行的整个依赖路径。 有没有办法做到这一点?