Include 为Makefile中的头添加目录

Include 为Makefile中的头添加目录,include,makefile,header,Include,Makefile,Header,您好,我想问您,如果有人知道如何在Makefile中为头文件添加目录以避免出现错误*.h not found,我已尝试此选项,但不起作用: INC_PATH := -I /directory/to/add 至少对于GNU make,请尝试隐式变量,如中所示: CFLAGS=-I/directory/to/add 尽管最终的目标是影响CFLAGS的价值(正如@unwind所建议的),但简单地设置CFLAGS的价值通常不是一个好主意,因为它通常由许多部分组成。您必须了解makefile的结构以及

您好,我想问您,如果有人知道如何在Makefile中为头文件添加目录以避免出现错误*.h not found,我已尝试此选项,但不起作用:

INC_PATH := -I /directory/to/add

至少对于GNU make,请尝试隐式变量
,如中所示:

CFLAGS=-I/directory/to/add

尽管最终的目标是影响CFLAGS的价值(正如@unwind所建议的),但简单地设置CFLAGS的价值通常不是一个好主意,因为它通常由许多部分组成。您必须了解makefile的结构以及使用的宏集

[补充:

爱德华多问:你能发布宏来做同样的事情吗

是的,但它们是否有用取决于您的makefile的结构

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}
从宏对象中列出的一组对象文件链接程序的规则如下所示:

${CC} ${CFLAGS} -o $@ ${OBJECTS} ${LDFLAGS}
如您所见,ESQLC_版本(正在使用的Informix ESQL/C版本,默认情况下通过运行脚本
esqlcver
派生)有可单独设置的宏,然后通过INC1到INC5和INCFLAGS(可能有很多宏,取决于平台)包含目录,以及优化器标志(OFLAGS)、额外标志(CFLAGS),用户定义的标志(UFLAGS-我在大多数makefile中使用的习惯用法;它允许用户在
make
命令行上设置UFLAGS,并向构建添加额外的标志),以及一堆与库相关的宏。这就是我的开发makefile可以在对我的开发平台(可以是Linux、Solaris或MacOS X)不太麻烦的情况下进行调优的条件。对于程序的使用者,有一个由
自动功能定义
生成的
配置
脚本,所以他们不必担心得到这些脚本是的。然而,这与这个密码有很强的基因相似性,包括UFLAGS选项

请注意,许多用于生成文件的系统都有一种设置CFLAGS的机制,这种机制与此稍有相似——简单地分配给CFLAGS会破坏系统所做的良好工作。但您必须了解您的生成文件,以便能够合理地修改它


]

对于cmake,在
${CC} ${CFLAGS} -o $@ ${OBJECTS} ${LDFLAGS}