c++ makefile:只使用include目录中的部分头文件

C++ makefile: use only some header files in include directory

本文关键字:文件 makefile include c++      更新时间:2023-10-16

我有一个项目,有几个文件夹:

folderA: header1.h header2.h
folderB: header1.h(modified) file1.cpp (includes header1.h and header2.h)

我想写一个Makefile,使用folderB中的header1.hfolderA中的header2.h

但是如果我这样写Makefile:

LOCAL_C_INCLUDES += 
folderA

然后我在编译时说some values are defined twice时出错,即使头文件以#pragma once开头。

你知道怎么做吗?

我也试过在makefile中显式列出头文件,但它似乎不起作用。

关于包含文件,我倾向于对包含包含的每个文件夹使用-Ipath/to/文件夹。在这个例子中是-Ipath/to/folderA -Ipath/folderB然后你可以写#include "header1.h" #include "header2.h"在你的代码中

include守卫(包括#ifndef和#pragma)不能跨编译单元工作,这就是为什么你永远不应该在头文件中定义任何东西(认真地说,它只会让你长期痛苦),只声明它们。

这将摆脱多重定义问题。为什么?

编译单元是一个.cpp文件和所有包含的头文件。每个.cpp创建一个对象文件,其中包含代码的中间阶段二进制表示,这是编译阶段。然后在链接阶段将这些目标文件链接在一起。由于每个.cpp在c++中是单独处理的,如果在header.hpp中有"float foo;",并且a.cpp和b.cpp都包含header.hpp,那么编译器在运行应用程序时如何知道您指的是哪个foo ?