处理#包括<;文件夹/文件.h>;在C语言中使用makefile

处理#包括<;文件夹/文件.h>;在C语言中使用makefile,c,makefile,include,C,Makefile,Include,我正在移植一些代码块IDE中开发的代码。我正在将其传输到Linux服务器,在那里我只能使用命令行编译代码。代码相当大(可能有100个文件),我需要更新许多文件中的include命令。例如,当我试图编译它时,会出现错误,例如:#include,其中一个文件找不到错误。我假设找不到它,因为gsl文件夹的位置是在IDE中的一个搜索目录字段选项中声明的。我可以通过每个文件更新到正确的路径,但是有没有更好的方法用于makefile 谢谢 编辑有问题的Makefile # -c : do not link,

我正在移植一些代码块IDE中开发的代码。我正在将其传输到Linux服务器,在那里我只能使用命令行编译代码。代码相当大(可能有100个文件),我需要更新许多文件中的include命令。例如,当我试图编译它时,会出现错误,例如:
#include
,其中一个文件找不到错误。我假设找不到它,因为gsl文件夹的位置是在IDE中的一个搜索目录字段选项中声明的。我可以通过每个文件更新到正确的路径,但是有没有更好的方法用于makefile

谢谢

编辑有问题的Makefile

# -c : do not link, just create object file
# -o : output file name

CFLAGS += -c -O2 -I../ctraj -I../cspice/include -I../SGP4 -I../cconj -I../GSL-1.13/include 
LIBS = -L../ctraj -lctraj -L../cspice/lib -lcspice -L../SGP4 -lsgp4 -L../cconj -lcconj -L./ -lgsl-0 -lgslcblas-0 -lm
DEPS = light.h ../ctraj/ctraj.h ../cconj/cconj.h
OBJ = light.o tle.o propagator.o orbitfit.o conjunction.o light_displacement.o forces_LF.o
OUT = light.exe

%.o: %.c $(DEPS)
gcc -o $@ $< $(CFLAGS)

light: $(OBJ)
cd ../ctraj/; make
gcc -o $(OUT) $(OBJ) $(LIBS)

clean:
rm *.o $(OUT)
编辑3

cconj中的第二个makefile

# -c : do not link, just create object file
# -o : output file name
#-L../cconj -lcconj 

CFLAGS += -c -O2 -I./ -I../GSL-1.13/include 
LIBS = -L./ -lgsl-0 -lgslcblas-0 -lm
INC= -I../GSL-1.13/include
DEPS = cconj.h 
OBJ = cconj_util.o ellipse_intersect.o collision_prob_real.o rcs2size.o
OUT = libcconj.a

%.o: %.c $(DEPS)
gcc -o $@ $< $(CFLAGS)

cconj: $(OBJ)
ar rcs $(OUT) $(OBJ) 

clean:
rm *.o $(OUT)
#-c:不要链接,只创建对象文件
#-o:输出文件名
#-L../cconj-lcconj
CFLAGS+=-c-O2-I./-I../GSL-1.13/包括
LIBS=-L./-lgsl-0-lgslcblas-0-lm
INC=-I../GSL-1.13/include
DEPS=cconj.h
OBJ=cconj\u util.o椭圆\u相交.o碰撞\u概率\u真实.o rcs2size.o
OUT=libcconj.a
%.o:%.c$(DEPS)
gcc-o$@$<$(CFLAGS)
cconj:$(OBJ)
ar rcs$(OUT)$(OBJ)
清洁:
马来西亚令吉*.o$(外)

使用gcc的-I选项指定在何处查找包含项。

使用gcc的-I选项指定在何处查找包含项。

尝试将此行添加到生成文件中,并告诉我们它是否有效:

CFLAGS += -I../GSL-1.13/include
为了编译源代码并生成目标文件,Make必须使用规则。(如果未将此类规则放入makefile中,Make会有一个用于此目的的默认规则。)

%.o: %.c
    $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@

此makefile启动第二个Make进程,该进程使用
light/cconj/
中的makefile。根据编译器输出(
gcc-o forces.o…
),该makefile不包含引用。因此,请尝试在此处添加同一行,如果不起作用,请发布该makefile,我们将继续查找。

尝试将这一行添加到您的makefile中,并告诉我们它是否起作用:

CFLAGS += -I../GSL-1.13/include
为了编译源代码并生成目标文件,Make必须使用规则。(如果未将此类规则放入makefile中,Make会有一个用于此目的的默认规则。)

%.o: %.c
    $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@

此makefile启动第二个Make进程,该进程使用
light/cconj/
中的makefile。根据编译器输出(
gcc-o forces.o…
),该makefile不包含引用。因此,请尝试在此处添加相同的行,如果不起作用,请发布该makefile,我们将继续查找。

答案很简单,但如果您向我们展示规则和
gsl/
的位置,则会有所帮助。路径是../gsl-1.13/include/gsl/gsl\u math。您好,我不确定您所说的规则是什么意思答案很简单,但是如果你给我们看一下规则和
gsl/
的位置会有帮助。路径是../gsl-1.13/include/gsl/gsl_math.hI我不确定你说的规则是什么意思似乎不起作用,我已经将我的makefile上传到了原始文件post@PumpkinPie:那很有帮助。你也可以发布错误消息,这样我们就可以看到它试图构建的文件了吗?好的,错误消息在那里,我已经包含了一个文件夹层次结构。不管它如何工作,我只是个傻瓜,没有更新正确的第二个makefile。谢谢你的帮助!!似乎不起作用,我已将我的makefile上载到原始版本post@PumpkinPie:那很有帮助。你也可以发布错误消息,这样我们就可以看到它试图构建的文件了吗?好的,错误消息在那里,我已经包含了一个文件夹层次结构。不管它如何工作,我只是个傻瓜,没有更新正确的第二个makefile。谢谢你的帮助!!