23

こんにちは、お聞きしたいのですが、*.h が見つからないというエラーを回避するために Makefile にヘッダー ファイルのディレクトリを追加する方法を誰かが知っている場合は、このオプションを試してみましたが、機能しません。

INC_PATH := -I /directory/to/add
4

2 に答える 2

22

少なくとも GNU make では、次のように暗黙の変数を試してくださいCFLAGS

CFLAGS=-I/directory/to/add
于 2008-12-04T17:18:54.650 に答える
15

目標は最終的に CFLAGS の値に影響を与えることですが (@unwind で提案されているように)、CFLAGS の値を単純に設定することは多くの場合、多くの部分から構築されるため、良い考えではありません。makefile の構造と、使用されるマクロのセットを理解する必要があります。

[追加

Eduardo の質問: 同じことを行うマクロを投稿できますか?

はい。ただし、それらが役立つかどうかは、makefile の構造によって異なります。これは、私の makefile の 1 つからのやや複雑な例です。

CC        = gcc -g
XFLAGS    = -Wall -Wshadow -Wstrict-prototypes -Wmissing-prototypes \
            -DDEBUG -Wredundant-decls
#CC        = cc -g
#XFLAGS    =
UFLAGS    = # Always overrideable on the command line

DEPEND.mk  = sqlcmd-depend.mk
INSTALL.mk = sqlcmd-install.mk

ESQLC_VERSION = `esqlcver`
OFLAGS    = # -DDEBUG_MALLOC -g
OFLAGS    = -g -DDEBUG -O4
PFLAGS    = -DHAVE_CONFIG_H
OFILES.o  = # rfnmanip.o # malloc.o # strdup.o # memmove.o
VERSION   = -DESQLC_VERSION=${ESQLC_VERSION}
#INC1     = <defined in sqlcmd-depend.mk>
#INC2     = <defined in sqlcmd-depend.mk>
INC3      = /usr/gnu/include
INC4      = ${INFORMIXDIR}/incl/esql
INC5      = . #${INFORMIXDIR}/incl
INCDIRS   = -I${INC3} -I${INC1} -I${INC2} -I${INC4} -I${INC5}
LIBSQLCMD = libsqlcmd.a
STRIP     = #-s
LIBC      = #-lc_s
LIBMALLOC = #-lefence
LIBRDLN   = -lreadline
LIBCURSES = -lcurses
LIBPOSIX4 = -lposix4
LIBG      = #-lg
LIBDIR1   = ${HOME}/lib
LIBDIR2   = /usr/gnu/lib
LIBJL1    = ${LIBDIR1}/libjl.a
LIBJL2    = ${LIBDIR1}/libjlss-${ESQLC_VERSION}.a
LIBTOOLS  = ${LIBJL2} ${LIBJL1}
LDFLAGS   = ${LIBSQLCMD} ${LIBTOOLS} -L${LIBDIR2} ${LIBG} ${LIBMALLOC} \
            ${LIBPOSIX4} ${LIBC} ${STRIP}
CFLAGS    = ${VERSION} ${INCDIRS} ${OFLAGS} ${XFLAGS} ${PFLAGS} ${UFLAGS}

これは私のプログラムのメイクファイルですsqlcmd(Microsoft が同じ名前のコマンドを作成する 10 年以上前に選ばれた名前です)。makeプログラムには、C コードをオブジェクトにコンパイルするための次のような規則があると仮定します。

${CC} ${CFLAGS} -c $*.c

また、マクロ OBJECTS にリストされた一連のオブジェクト ファイルからプログラムをリンクするためのルールは次のようになります。

${CC} ${CFLAGS} -o $@ ${OBJECTS} ${LDFLAGS}

ご覧のとおり、ESQLC_VERSION (使用中の Informix ESQL/C のバージョンであり、スクリプトを実行することによってデフォルトで導出されますesqlcver) 用に個別に設定可能なマクロがあり、次に INC1 から INC5 および INCFLAGS を介してインクルード ディレクトリがあります (非常に多くのマクロが存在する可能性があります)。これらのうち、プラットフォームに応じて)、オプティマイザ フラグ (OFLAGS)、追加フラグ (CFLAGS)、ユーザー定義フラグ (UFLAGS - ほとんどのメイクファイルで使用するイディオム。これにより、ユーザーはmakeコマンド ラインで UFLAGS を設定し、ビルドに追加のフラグを追加する)、および一連のライブラリ関連のマクロを追加します。これは、Linux、Solaris、または MacOS X などの開発プラットフォームに対して最小限の手間で開発用の makefile を調整できるようにするために必要なことです。プログラムのコンシューマー向けにconfigureautoconf、そのため、それらのビットを正しく取得することを心配する必要はありません。ただし、これは、UFLAGS オプションを含め、このコードと遺伝的に非常に類似しています。

makefile を構築するための多くのシステムには、これとわずかに似た CFLAGS を設定するメカニズムがあることに注意してください。CFLAGS に単に割り当てると、システムによって行われた適切な作業が元に戻されます。しかし、正しく変更できるようにするには、makefile を理解する必要があります。

]

于 2008-12-04T17:43:21.323 に答える