c++ makefile:只使用include目录中的部分头文件
C++ makefile: use only some header files in include directory
我有一个项目,有几个文件夹:
folderA: header1.h header2.h
folderB: header1.h(modified) file1.cpp (includes header1.h and header2.h)
我想写一个Makefile,使用folderB
中的header1.h
和folderA
中的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 ?
相关文章:
- 使用 Makefile 中的头文件编译 Pybind (不使用 cmake)
- Arduino-Makefile:编译器无法编译用户库 cpp 文件
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 如何在makefile中包含tensorflow c ++".so"文件?
- 有没有办法从Makefile访问VS Code c_cpp_properties.json文件中的定义
- 在Windows上运行Linux Makefile(.so文件)
- 为简单的src,include,libs文件夹项目编写Makefile
- 如何从 Makefile 中的其他目录导入所有源代码和头文件
- 使用 g++ 和 Makefile 编译 c++ 时可执行文件非常大
- Makefile在Linux中工作,但在Windows下不起作用,在子目录中找不到文件
- makefile和错误将与大型项目分开的文件编译
- 当自动编译对象文件时,如何使我的makefile使用我的cflags标志
- makefile 没有将 .o 和可执行文件放在各自的 obj 和 bin 目录中
- 如何仅重新编译makefile中更改的内容,自动查找.cpp文件?
- Arduino Makefile:如何将传感器数据保存到计算机中的文件中
- 使用GCC的C makefile - 从子文件夹列表中生成源文件列表
- 自动工具: Makefile.am:如果文件存在,则链接
- 您可以使用 makefile 从 .o 对象文件创建 C++ 文件吗?
- 多个文件Makefile编译
- 一个文件Makefile问题:C++