我已经尝试了一段时间来弄清楚这个问题,现在我已经到了无法猜测/想出来的地步了。
我正在为学校的一个数值分析课编写一些C程序,其中许多程序都使用了我预先编写的实用函数。我希望将实用程序"library“放在与类程序不同的目录中,但在需要时可以包含实用程序头文件。下面是我的“设置”的结构(+ =目录/文件夹,-=文件)
+Code
+Classes
+Fall_11
+Numerical_Programs
+Bisection
-.c and .h file(s) for bisection
+linux
-makefile
+util
+CompareFloats
- CompareFloats.h所以基本上,我在二分表的目录中有二分表.c和二分表.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"(它比makefile少了一个../,因为Bisection.c比makefile高一个级别)。
有什么建议吗?我真的希望只有#include "CompareFloats.h“,而不是相对路径。
如果我没有提供足够的信息,请让我知道。
谢谢。
发布于 2011-09-03 12:36:17
所以您的问题出在为Bisection.o生成的自动规则中。您可以执行以下两项操作之一:
1)为Bisection.o制定规则
Bisection.o : ../Bisection.h
gcc -c -o ../Bisection.o -I$(UTIL) ../Bisection.c 2)将包含标志-I$(UTIL)附加到变量CFLAGS (这些是传递给C编译器的标志)
发布于 2011-09-03 12:45:13
从以下内容开始:
CFLAGS=$(CFLAGS) -I$(UTIL)
CXXFLAGS=$(CXXFLAGS) -I$(UTIL)大多数人最终也需要
LDFLAGS=$(LDFLAGS) -I$(UTIL)但你现在还不知道。
https://stackoverflow.com/questions/7291173
复制相似问题