【问题标题】:Check if a file is in the include path检查文件是否在包含路径中
【发布时间】:2013-06-14 17:17:52
【问题描述】:

在 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:有没有一种简单的方法来检查包含路径中是否存在文件,如我的第一个示例所示?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我最终使用了这种方法,但是我试图避免它,以便用户可以在多个项目中使用同一个库,而不必在每次构建另一个项目时更改设置
    【解决方案2】:

    因为这是一个库的一部分,所以你可能有一个 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-17
      • 2017-10-02
      • 1970-01-01
      • 2011-08-22
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      • 2017-08-30
      相关资源
      最近更新 更多