检查文件是否在包含路径中

时间:2013-06-14 17:17:53

标签: c++ include c-preprocessor include-path

在C ++中,可以在编译时检查具有给定名称的文件是否包含包含路径。

我正在尝试设置一个库,该库从用户创建的文件中获取编译器设置,例如config.h。如果该文件不存在,则库将默认为可工作状态。

我想做一些像这样的事情

#IFINCLUDED config.h
#  include config.h
#else
#    define defaultLibrarySettings
#endif

我想解决方法就是做一些事情:

#include "config.h
#ifndef defaultLibrarySettings
#   define defaultLibrarySettings
#endif

然而,用户仍然需要在路径中的某个位置使用“config.h文件,否则它们将获得未解析的包含。

最后的想法是做类似

的事情
#ifdef USE_EXTERNAL_SETTINGS
#    include "config.h"
#else
#    define defaultLibrarySettings
#endif

然而,这需要用户在每次包含我的库时#define USE_EXTERNAL_SETTINGS。

TLDR:有一种简单的方法来检查包含路径中是否存在文件,如第一个例子中所示?

2 个答案:

答案 0 :(得分:1)

您可以使用默认库设置包含并填写config.h,并允许用户更改它们。这样,用户也会看到允许的配置

答案 1 :(得分:0)

由于这是库的一部分,所以你可能还有一个makefile,所以你可以使用shell脚本来处理它。

这样的事情:

 echo "#include \"config.h\"" > /tmp/tst.c
 rm 2>/dev/null /tmp/ok
 gcc -c tst.c -o tst.o 2>/dev/null && touch /tmp/ok
 if [ ! -f /tmp/ok ]; then echo "create default config here"; fi