【发布时间】:2011-11-09 14:36:30
【问题描述】:
我已经尝试解决这个问题一段时间了,现在我已经没有猜测/想法了。
我正在为学校的数值分析课制作一些 C 程序,其中许多程序使用我事先编写的实用函数。我希望将实用程序“库”放在与类程序不同的目录中,但能够在需要时包含实用程序头文件。下面是我的“设置”的结构(+ = 目录/文件夹,- = 文件)
+Code
+Classes
+Fall_11
+Numerical_Programs
+Bisection
-.c and .h file(s) for bisection
+linux
-makefile
+util
+CompareFloats
- CompareFloats.h
所以基本上,我在 Bisection 目录中有 Bisection.c 和 Bisection.h。 Bisection.c 使用了在 util/CompareFloats 目录下的 CompareFloats.h 中的浮点比较函数。
下面是我一直在尝试使用的makefile:
###############################################################################
# makefile for Bisection test #
###############################################################################
#--------------------------------Macros----------------------------------------#
COMPILER = gcc
UTIL = ../../../../../util/CompareFloats
FLAGS = -ggdb -Wall -lm -I$(UTIL)
OBJECTS = ../Bisection.o ../BisectTest.o $(UTIL)/CompareFloats.o
OBJECT_DIR = ../OBJECTS
EXEC = BisectTest
all : $(EXEC)
test -d $(OBJECT_DIR) || mkdir $(OBJECT_DIR)
mv $(OBJECTS) $(OBJECT_DIR)
$(EXEC) : $(OBJECTS)
$(COMPILER) $(FLAGS) $(OBJECTS) -o $(EXEC)
#-----------------------------Dependencies--------------------------------------#
Bisection.o : ../Bisection.h
BisectTest.o: ../Bisection.h
CompareFloats.o: $(UTIL)/CompareFloats.h
clean:
rm -f $(EXEC) *.o $(OBJECT_DIR)/*.o
rmdir $(OBJECT_DIR)
我了解 -I 标志将允许在其他目录中搜索头文件。我认为我正确使用了它,但我无法让它工作。我只是收到一个错误,即 CompareFloats.h 不存在(我已经仔细检查了路径并且它是正确的)。在 Bisection.c 中,我有
#include "CompareFloats.h"
像往常一样。我可以让它工作的唯一方法是让#include语句包含相对路径,比如
#include "../../../../util/CompareFloats/CompareFloats.h"
(它少了一个 ../,因为 Bisection.c 比 makefile 高一级)。
有什么建议吗?我真的很想只使用#include "CompareFloats.h" 而不是相对路径。
如果我没有提供足够的信息,请告诉我。
谢谢。
【问题讨论】:
-
你能打印出实际运行的编译命令吗?如果你使用 make,它应该打印出像
gcc -ggdb ...这样的行 -
cc -c -o ../Bisection.o ../Bisection.c ../Bisection.c:10:27:错误:CompareFloats.h:没有这样的文件或目录../ Bisection.c:在函数'bisect'中:../Bisection.c:32:错误:'EPSILON'未声明(在此函数中首次使用)../Bisection.c:32:错误:(仅报告每个未声明的标识符一次 ../Bisection.c:32: 错误:对于它出现的每个函数。) make: *** [../Bisection.o] 错误 1
标签: c search makefile directory header-files