如何在 gcc 中的当前路径下排除标头
How to exclude header under current path in gcc
假设我有两个目录product
和test
。
./test
./test/test_product.cpp
./test/foo.h
./product
./product/product.cpp
./product/product.h
./product/foo.h
product.cpp
包括foo.h
:
#include "foo.h"
默认行为是包含/product/foo.h
。但是,我想在/product/product.cpp
中包含/test/foo.h
,而无需对产品目录进行任何修改。有什么办法可以做到这一点吗?多谢!
您可以使用 -I
选项添加 GCC 预处理器用于查找头文件的搜索路径,然后您可以在包含文件时使用尖括号,然后预处理器应在与源文件相同的目录中查找文件。
换句话说,添加例如 -Itest
将test
目录添加到包含文件搜索路径。然后改用#include <foo.h>
。当您想改用product/foo.h
时,只需删除-Itest
选项并添加-Iproduct
即可。
还有另一种方式,涉及条件编译和兰亭提出的解决方案。
你可以有例如
#ifdef TEST
# include "../test/foo.h"
#else
# include "foo.h"
#endif
然后,要使用test/foo.h
构建,您定义了宏TEST
,这可以使用-D
选项在命令行上完成:
$ gcc -DTEST ...
要使用product/foo.h
只需删除该选项,以便不再定义TEST
。
您可以自由地为包含中的标头添加完整路径和相对路径。
#include "../test/foo.h"
例如,会工作
看看这些关于如何以及何时使用包括形式的讨论:相对路径(例如"../include/header.h"作为标题?和如何正确使用 #include 指令?
您可以通过在 #include 下提供其路径来在文件中包含标头。 前任。 #include".h 文件的路径"
您可以使用标头保护来存档,假设两个文件具有不同的标头保护,您可以在 make 文件的标志列表中添加 -D(您不需要的任何文件的标头保护)。
相关文章:
- 获取当前正在运行的 exe 名称(不是路径)
- 如何获取当前用户的默认RAS电话簿路径?
- 如何使用提升获取当前文件路径?
- 如何在 c++ 中获取当前文件路径?
- 获取自己的可执行文件的当前路径 (C++)
- 包括不排除静态库项目的用户路径的路径
- 如何获取当前图书馆路径
- 如果P从root路径开始,为什么STD :: filesystem :: path :: append替换当前路径
- 如何添加相对于当前文件的头文件路径
- 使用getLastror()== 0的当前路径的负载失败
- 获取当前工作目录的相对路径,而不是绝对路径
- 如何从 Pc-lint 中排除特定'TI'包装路径?
- 当前目录的文件路径C++
- 阻止 GCC 在包含搜索路径上搜索当前目录"-I-"选项
- 如何在 gcc 中的当前路径下排除标头
- 在 Windows 资源管理器中更改当前路径
- _fullpath返回exes当前路径,而不是驱动器后者
- 更改Qt应用程序的当前路径
- 如何从cppcheck分析中排除测试路径
- 如何使用Boost.Filesystem更改当前路径?