Tag: makefile

什么是C的高效工作流程? – Makefile + bash脚本

我正在开发一个跨越多个C文件的项目。 对于我的第一对练习程序,我只是在main.c编写了代码并使用gcc main.c -o main编译。 在我学习的过程中,这对我有用。 现在,我正在研究一个更大的项目。 我想继续自己编译(或者至少手动设置),这样我就可以理解这个过程了。 读了一下后,我决定制作一个Makefile。 注意:我也在使用GTK +,因此我必须查找如何将其添加到compile命令中。 这是经过一些研究后的样子: main: gcc -Wall -g main.c -o main `pkg-config –cflags –libs gtk+-2.0` 起初,我只是在运行“make”。 然后我遇到一些问题,即使我更改了文件,也会出现错误“main is latest”。 所以我写了一个脚本: #!/bin/bash rm main make ./main 所以我做了更改,然后运行这个脚本。 这是一个好的/正常的系统吗? 我希望拥有可扩展的系统,因为我的项目将会增长。 我假设我可以保留该脚本,只需将依赖项添加到makefile并更改makefile中的主编译命令。 我对么? 提前致谢。 编辑: 感谢您提供有关如何修复Makefile的反馈。 那么典型的编译过程1)类型make然后2) ./main无论项目如何设置或其大小(假设你已经编写了正确的makefile)?

valgrind给出错误但无法找到位置

我已经开始在一天前使用valgrind正如SO本身的人所建议的那样。这是一个了不起的工具,但今天我遇到了一个问题。它给出了以下错误: definitely lost bytes但无法告诉错误的位置。 这是valgrind的输出: udit@udit-Dabba ~ $ valgrind –leak-check=full sendip -v -p ipv6 -f file.txt -6s ::1 -p ah -as 0x20 -aq 0x40 -ak “yugal” -am xorauth.so -p udp -us 21 – ud 21 ::2 ==12885== Memcheck, a memory error detector ==12885== Copyright (C) 2002-2010, and GNU GPL’d, by Julian Seward et al. ==12885== […]

构建用于检查测试C框架的库

我开始使用check框架来测试C应用程序。 为了更好地理解,我在check包中看了一下这个例子。 它工作正常,但我不需要automake工具 – 我想用我自己的Makefile编译它(因为我想要正确理解检查,我需要将我的最终应用程序用作操作系统的包)。 也许我可以在那里使用自动生成的Makefile,但是现在,这将是我必须学习的下一个新事物,我已经限制了准备unit testing的时间。 (然后,当然,我想学习和理解生成Makfile的工具,使用configure等) 使用我的Makefile构建应用程序时出现问题,我没有链接该对象以进行检查function: /tmp/ccm7cniy.o: In function `test_money_create’: check_money.c:(.text+0x1e): undefined reference to `tcase_fn_start’ check_money.c:(.text+0x79): undefined reference to `_fail_unless’ check_money.c:(.text+0xcc): undefined reference to `_fail_unless’ 我发现,在示例应用程序中是带有obj的gcc。 文件check_money-check_money.o ,由gcc创建: gcc -DHAVE_CONFIG_H -I. -I.. -g -O2 -MT check_money-check_money.o -MD -MP -MF .deps/check_money-check_money.Tpo -c -o check_money-check_money.o `test -f’check_money.c’ || echo ‘./’`check_money.c 这是我的问题:它使用依赖关系check_money-check_money.Tpo 。 该文件是由./configure命令生成的,我没有使用。 如何创建自己的.o文件以便检查成功构建? […]

obfile的Makefile C子目录规则

我运行一个简单的Makefile没有问题: CC=gcc CFLAGS= -std=c99 -ggdb -Wall -I. DEPS = hellomake.h OBJ = hellomake.o hellofunc.o %.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) hellomake: $(OBJ) gcc -o $@ $^ $(CFLAGS) 这些文件位于主项目的目录中: ./project/Makefile ./project/hellomake.c ./project/hellomake.h 然后我尝试组织文件,并把事情如下: ./project/Makefile ./project/src/hellomake.c ./project/include/hellomake.h 和额外的子目录目录: ./project/lib ./project/obj 然后是新版本的Makefile: IDIR =include CC=gcc CFLAGS= -std=c99 -ggdb -Wall -I$(IDIR) ODIR=obj LDIR =lib LIBS=-lm _DEPS […]

如何将我的C代码链接到PCRE库? (目前正在抛出链接器错误。)

问题 注意:我最初在一个更大的项目中遇到了这个问题; 所以我把代码减少到你看到的测试用例。 我无法弄清楚如何编译以下测试代码。 具体来说,似乎链接器无法找到PCRE库(请参阅下面的PCRE配置方式)。 尽管显式-L/usr/local/lib -lpcre被传递给链接器(PCRE安装在/usr/local目录结构中)。 我究竟做错了什么? 🙁 控制台输出是: $ make rm -f ./*.o gcc -ansi -Wall -pedantic-errors -I/usr/local/include -g0 -O3 -static -static-libgcc -march=i686 -malign-double -m128bit-long-double -c main.c -o main.o gcc -ansi -Wall -pedantic-errors -L/usr/local/lib -lpcre -g0 -O3 -static -static-libgcc -march=i686 -malign-double -m128bit-long-double main.o -o pcre_test_1_i686 main.o:main.c:(.text+0x100): undefined reference to `pcre_compile2′ main.o:main.c:(.text+0x12e): undefined reference […]

导致无法在海湾合作委员会中划分数字的原因是什么

我的情况非常奇怪。 每次我尝试编译我的arm项目(LPC2378,codesourcery arm-none-eabi-gcc-4.5.1)时我都会遇到同样的错误 /media/data/Projects/arm/uart/main.c:39: undefined reference to `__aeabi_uidiv’ /media/data/Projects/arm/uart/main.c:40: undefined reference to `__aeabi_uidiv’ 违规代码如下所示: U0DLL = ((((PLLCFG & 0x7FFF) + 1) * F_OSC) / ((((PLLCFG & (0xFF <> 16) + 1) * ((CCLKCFG & 0xFF) + 1) * 8 * BAUD * 1)) % 256; U0DLM = ((((PLLCFG & 0x7FFF) + 1) * F_OSC) / […]

我可以在目录和子目录中搜索头文件吗?

有可能指示g ++以递归方式搜索头文件的文件夹吗? 在我的例子中,我想要g ++来搜索 / ARDrone_SDK_2_0_1 / ARDroneLib /柔和/ 以及头文件的所有子目录。 可以这样做吗? 这是一个简单的Makefile示例: C=g++ CFLAGS=-c -Wall LDFLAGS= INC1=/ARDrone_SDK_2_0_1/ARDroneLib/Soft/ <- can this be recursive? INCDIRS= -I${INC1} SOURCES=src/dronevid.cpp OBJECTS=$(SOURCES:.cpp=.o) EXECUTABLE=build/dronevid all: $(SOURCES) $(EXECUTABLE) $(EXECUTABLE): $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $@ .cpp.o: $(CC) $(CFLAGS) $(INCDIRS) $< -o $@

抑制我的Makefile的输出

我有 ; default : gcc -o function function.c 当我在终端输入make时,会发出以下消息 user@user-laptop:~/Desktop$ make gcc -o function function.c user@user-laptop:~/Desktop$ 但我想要 user@user-laptop:~/Desktop$ make user@user-laptop:~/Desktop$ 我怎样才能做到这一点?

“干净”导致“没有规则让目标’干净’”

我正在运行Ubuntu 10.04。 每当我运行make clean ,我得到这个: make:***没有规则让目标“干净”。 停止。 这是我的makefile: CC = gcc CFLAGS = -g -pedantic -O0 -std=gnu99 -m32 -Wall PROGRAMS = digitreversal all : $(PROGRAMS) digitreversal : digitreversal.o $(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) .PHONY: clean clean: @rm -f $(PROGRAMS) *.o core 任何想法为什么它不工作? 编辑:好像在做: make -f Makefile.txt clean 作品。 现在:是否有任何设置需要更改,所以我不必每次都执行-f Makefile.txt ?

makefile混淆中的链接器库路径

我已经编程了一段时间,但我仍然不完全理解链接器的行为方式。 例如,今天我下载并安装了一个我想在Linux应用程序中使用的库。 (这是Xerces – 用于解析XML文件)。 我创建了一个makefile,并在其命令中为它提供了.so和.a文件的路径:-L / usr / local / lib,并且还告诉它要包含的库的名称:-lxerces-c-3.1。 我的应用程序编译正常但在运行时失败“无法打开共享对象文件libxerces-c-3.1.so”。 当我在makefile中正确地给出路径和名称时,为什么会出现这种情况? 然后我将库路径添加到我的.bashrc文件中的LD_LIBRARY_PATH变量,然后它工作。 这很好,但如果我现在删除我的makefile中的库的路径,甚至不包括库的名称,它仍然有效。 我很困惑这里发生了什么。 如何通过分配LD_LIBRARY_PATH变量的路径仍然可以找到正确的库,并且只有在我这样做的情况下才能工作? 我在别处读过甚至不使用LD_LIBRARY_PATH。 我很感激任何答案。 问题有点长,希望不是偏离主题,但我希望其他人也可以从中学习。 谢谢