包括父目录的标题

问题描述 投票:0回答:1

我有一个指向源目录的链接,该目录位于父目录下。链接的内容无法修改。该链接具有标题和.c文件。头文件包括一个“ Config.h”文件。 Config.h只能驻留在父目录中,因为我无法修改链接下的任何内容。我必须使用链接中的源并编译父目录。这是目录结构。

ParentDir
    |-TestSrc.c
    |-TestSrc.h
    |-Config.h
    |-Makefile
    |-LinkToSrcDir
           |-Src.c
           |-Src.h(#include "Config.h")

我的makefile非常简单

CC = gcc
INC_DIR = -IParentDir -IParentDir/LinkToSrcDir
CFLAGS = -Wall -Wextra $(INC_DIR)

all: mybin
mybin: TestSrc.o Src.o
       $(CC) $(CFLAGS) -o TestSrc.o Src.o
TestSrc.o: TestSrc.c
       $(CC) $(CFLAGS) -c TestSrc.c
--- similar code for Src.o ----
Phony: clean (all the usual rm -f)

我的问题是,由于无法修改src.h,因此make总是抱怨找不到Config.h(尝试了几种不同的方法)。如何编写Makefile使src.h在父目录中查找Config.h?

makefile header-files
1个回答
0
投票

最简单的方法是为编译器标志使用完全限定的路径:

INC_DIR = -I$(CURDIR)/ParentDir -I$(CURDIR)/ParentDir/LinkToSrcDir

请注意,当编译器使用相对路径搜索头文件时,它总是从出现源文件的目录开始。而不是从调用编译器的工作目录开始。

例如,从the GCC manual

预处理程序查找包含的头文件...首先相对于当前文件的目录

在您的情况下,当前文件LinkToSrcDir/Src.h,因此所有路径将相对于目录LinkToSrcDir展开。

当您在上方说一个链接时,我假设您的意思是symbolic链接。在这种情况下,您可能无法使用类似-I..的名称,因为那样会使您链接到的目录的父目录。

您几乎别无选择,只能在-I选项中使用完全限定的路径。

© www.soinside.com 2019 - 2024. All rights reserved.