the*_*ine 7 c gcc include header-files
我们假设我在foo.h中定义了BAR.但是foo.h可能不存在.如果没有编译器向我抱怨,我如何包含它?
#include "foo.h"
#ifndef BAR
#define BAR 1
#endif
int main()
{
return BAR;
}
Run Code Online (Sandbox Code Playgroud)
因此,如果在foo.h中将BAR定义为2,则如果foo.h存在则程序将返回2,如果foo.h不存在则返回1.
在一般情况下,你需要做一些外部要做到这一点-例如,通过做一些喜欢玩与周围的搜索路径(如在评论中所建议的),并提供一个空foo.h作为备用,或包裹#include内#ifdef HAS_FOO_H... #endif和HAS_FOO_H由编译器开关设置(-DHAS_FOO_H用于gcc/clang等).
如果您知道您正在使用特定的编译器,并且可移植性不是问题,请注意某些编译器支持包括可能存在或不存在的文件作为扩展.例如,请参阅clang的__has_include功能.
使用像GNU Autoconf这样的工具,就是它的设计目标.(在Windows上,您可能更喜欢使用CMake).
所以在你的configure.ac,你有一个像:
AC_CHECK_HEADERS([foo.h])
Run Code Online (Sandbox Code Playgroud)
在运行之后configure,将定义HAVE_FOO_H哪个,您可以像这样测试:
#ifdef HAVE_FOO_H
#include "foo.h"
#else
#define BAR 1
#endif
Run Code Online (Sandbox Code Playgroud)
如果你打算沿着autotools路线(即autoconf和automake,因为它们可以很好地协同工作),我建议你从这个优秀的教程开始.
| 归档时间: |
|
| 查看次数: |
6295 次 |
| 最近记录: |