web-dev-qa-db-ja.com

Makefileにヘッダー用のディレクトリを追加する

こんにちは私はあなたに尋ねたいと思います、誰かがエラー* .h not foundを回避するためにMakefileにヘッダーファイルのディレクトリを追加する方法を知っているなら、私はこのオプションを試しましたが機能しません:

INC_PATH := -I /directory/to/add
23
Eduardo

目的は最終的にCFLAGSの値に影響を与えることです(@unwindで推奨)、CFLAGSの値を単純に設定することは、多くの部分から構築されることが多いため、多くの場合お勧めできません。 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年以上前に選択された名前)という私のプログラム用のmakefileです。 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など、私の開発プラットフォームへの手間を最小限に抑えて開発メイクファイルを調整できるようにするために必要なことです。プログラムのコンシューマー向けに、configureによって生成されたautoconfスクリプトがあるため、それらのビットを正しくすることについて心配する必要があります。ただし、これはUFLAGSオプションを含め、このコードに強い遺伝的類似性があります。

Makefileをビルドするための多くのシステムには、CFLAGSをほのかに設定するためのメカニズムがあり、CFLAGSに割り当てるだけで、システムが行った適切な作業が取り消されます。ただし、makefileを正しく理解するには、makefileを理解する必要があります。

]

15

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

CFLAGS=-I/directory/to/add
21
unwind