C 如何在构建共享库时指定头文件的位置

C 如何在构建共享库时指定头文件的位置,c,makefile,shared-libraries,C,Makefile,Shared Libraries,我有两个文件夹,每个文件夹包含一个.c.h和makefile。它们是库,当我构建它们时,它们会生成一个.so文件 我想在另一个头文件中包含一个头文件 当我用make文件构建它时,我如何告诉它头文件在另一个文件夹中?我是否在makefile中指定它 这是在ubuntu上 这是makefile CC=gcc CFLAGS=-c -Wall -Werror -fPIC APP1 = tca all: $(APP1) $(APP1): $(APP1).c $(CC) $(CFLAGS) $(

我有两个文件夹,每个文件夹包含一个.c.h和makefile。它们是库,当我构建它们时,它们会生成一个.so文件

我想在另一个头文件中包含一个头文件

当我用make文件构建它时,我如何告诉它头文件在另一个文件夹中?我是否在makefile中指定它

这是在ubuntu上

这是makefile

CC=gcc

CFLAGS=-c -Wall -Werror -fPIC 

APP1 = tca

all: $(APP1) 

$(APP1): $(APP1).c
$(CC) $(CFLAGS) $(APP1).c $(LIBS)
$(CC) -shared -o lib$(APP1).so $(APP1).o
sudo cp $(APP1).h /usr/include/ 
sudo cp lib$(APP1).so /usr/lib/
sudo chmod 0755 /usr/lib/lib$(APP1).so
sudo ldconfig
sudo ldconfig -p | grep $(APP1)

clean:
rm -rf *.o
rm -rf *.so
rm -rf $(APP1)

假设项目目录结构如下所示:

./project_dir
  |-src/      //< Source code folder
  |-include/  //< Folder containing header files
  |-Makefile  //< Makefile for the project

您只能在文件中指定它。放置makefile的位置将是主目录。现在假设您有两个目录A和B,每个目录都包含一个头文件,您需要包含这些头文件。在需要包含头文件的主目录中,只需提供如下路径

#include "../A/header_name.h" //If dir A is on just outside main dir.
#include "./B/header_name.h"  //If dir B is on inside the main dir.
类似地,您可以单独包含文件。
如果要通过makefile包含after
cc
命令,可以添加
-idirafter../A/
参数。我还没有试过使用makefile,但它可以在命令行上工作。所以,它可能会工作。让我知道:)谢谢

您要问的是如何告诉您的编译器(因为make所做的只是启动一个命令行)头的位置。 更具体地说,这是预处理器的工作

有了gcc,您有两个选项可以执行此操作:
-I dir
-ikote dir
前者将在预处理过程中找到的每个#include指令的搜索路径中添加dir,后者仅对使用引号的#include指令添加dir

是关于这些选项的文档

#include "../A/header_name.h" //If dir A is on just outside main dir.
#include "./B/header_name.h"  //If dir B is on inside the main dir.