我有两个文件夹,每个文件夹包含.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)
答案 0 :(得分:0)
假设项目目录结构是这样的:
./project_dir
|-src/ //< Source code folder
|-include/ //< Folder containing header files
|-Makefile //< Makefile for the project
在Makefile中添加以下更改:
CC=gcc
CFLAGS=-c -Wall -Werror -fPIC -I ./include
APP1 = tca
all: $(APP1)
$(APP1): $(APP1).c
$(CC) $(CFLAGS) $(APP1).c $(LIBS)
$(CC) -shared -o lib$(APP1).so $(APP1).o
sudo cp ./include/$(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)
答案 1 :(得分:0)
您只能在文件中指定它。放置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,但这可以在命令行上运行。所以,它可能会起作用。让我知道:)谢谢
答案 2 :(得分:0)
你要问的是如何告诉你的编译器(因为make是做什么只是为了触发一个命令行)。 更具体地说,它是预处理器的工作。
使用gcc,您有两种选择:-I dir
和-iquote dir
前者会将dir添加到预处理期间找到的每个#include指令的搜索路径中,后者仅用于使用引号的#include指令。
Here是有关这些选项的文档。