C 如何在构建共享库时指定头文件的位置
我有两个文件夹,每个文件夹包含一个.c.h和makefile。它们是库,当我构建它们时,它们会生成一个.so文件 我想在另一个头文件中包含一个头文件 当我用make文件构建它时,我如何告诉它头文件在另一个文件夹中?我是否在makefile中指定它 这是在ubuntu上 这是makefileC 如何在构建共享库时指定头文件的位置,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) $(
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.