C语言中跨子目录使用#include包含头文件的方法
解决C语言跨子目录头文件包含问题
针对你的目录结构(源文件在source/,头文件在同级的headers/),有几个实用的方案,完全不用把文件移到系统目录:
1. 直接用相对路径包含
在source/下的源文件里,通过相对路径定位到headers/目录,比如:
#include "../headers/your_header.h"
这里../表示回到当前源文件目录的父目录,再进入headers/找到目标头文件,""形式的#include本来就支持相对路径,只是你之前没用到而已。
2. 编译时指定头文件搜索路径
如果不想在代码里写相对路径,编译时给编译器加-I参数指定头文件目录。比如用gcc编译的话:
gcc -I../headers source/your_source.c -o your_program
-I后面跟的是头文件目录的路径(相对于你执行编译命令的位置),这样编译器会自动去这个目录找头文件,代码里直接写:
#include "your_header.h"
就行,代码会更简洁。
3. 用Makefile统一管理(适合多文件项目)
如果是多文件项目,写个Makefile把-I参数放到CFLAGS里,避免每次编译重复敲命令:
CFLAGS = -I../headers SRCS = source/your_source.c source/another_source.c OBJS = $(SRCS:.c=.o) TARGET = your_program $(TARGET): $(OBJS) gcc $(OBJS) -o $(TARGET) %.o: %.c gcc $(CFLAGS) -c $< -o $@
之后执行make就能自动完成编译,不用手动处理路径问题。
另外不建议把自己的头文件移到/usr/include,一是系统目录是给系统库用的,放自己的文件会导致目录混乱,二是多个项目出现同名头文件时会冲突,也不利于项目的版本管理和迁移。
内容的提问来源于stack exchange,提问作者vman
相关产品推荐
相关产品推荐

