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