假设我在foo.h中定义了BAR。但是foo.h可能不存在。我如何包括它,而不让编译器抱怨我呢?
#include "foo.h"
#ifndef BAR
#define BAR 1
#endif
int main()
{
return BAR;
}因此,如果BAR在foo.h中定义为2,则如果foo.h存在,程序将返回2,如果foo.h不存在,则返回1。
发布于 2012-07-19 21:40:30
使用像GNU Autoconf这样的工具,这就是它设计的目的。(在windows上,您可能更喜欢使用CMake)。
所以在你的configure.ac中,你会有这样的一行:
AC_CHECK_HEADERS([foo.h])在运行configure之后,它将定义HAVE_FOO_H,您可以这样进行测试:
#ifdef HAVE_FOO_H
#include "foo.h"
#else
#define BAR 1
#endif如果您打算沿着autotools路线走(即autoconf和automake,因为它们很好地一起工作),我建议您从这个excellent tutorial开始。
https://stackoverflow.com/questions/11569659
复制相似问题