1

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

ただし、これには、ユーザーがライブラリを含めるたびに USE_EXTERNAL_SETTINGS を #define する必要があります。

TLDR: 最初の例に示すように、ファイルがインクルード パスに存在するかどうかを確認する簡単な方法はありますか?

4

2 に答える 2

1

config.h にデフォルトのライブラリ設定を含めて入力し、ユーザーがそれらを変更できるようにすることができます。このようにして、ユーザーには許容される構成も提示されます

于 2013-06-14T17:24:08.510 に答える
0

これはライブラリの一部であるため、いずれにせよ makefile がある可能性が高いため、シェル スクリプトを使用して処理できます。

このようなもの:

 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
于 2013-06-14T17:31:26.787 に答える