gpt4 book ai didi

include - 在 Makefile 中为头文件添加目录

转载 作者:行者123 更新时间:2023-12-03 11:19:15 25 4
gpt4 key购买 nike

你好我想问你,如果有人知道我如何在Makefile中为头文件添加一个目录以避免错误*.h not found,我试过这个选项但不起作用:

INC_PATH := -I /directory/to/add

最佳答案

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

[添加:

Eduardo 问:你能发布宏来做同样的事情吗?

是的,但它们是否有用取决于您的 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}

这是我的一个名为 sqlcmd 的程序的 makefile (在 Microsoft 创建同名命令之前十年或更长时间选择的名称)。我假设 make程序有一个将 C 代码编译为对象的规则,例如:
${CC} ${CFLAGS} -c $*.c

并且从宏 OBJECTS 中列出的一组目标文件链接程序的规则如下所示:
${CC} ${CFLAGS} -o $@ ${OBJECTS} ${LDFLAGS}

如您所见,ESQLC_VERSION(正在使用的 Informix ESQL/C 版本,默认通过运行脚本 esqlcver 派生)有单独的可设置宏,然后包含目录通过 INC1 到 INC5 和 INCFLAGS(可以有其中很多,取决于平台)、优化器标志(OFLAGS)、额外标志(CFLAGS)、用户定义的标志(UFLAGS - 我在大多数 makefile 中使用的一个习惯用法;它允许用户在 make 命令行并在构建中添加一个额外的标志),以及一堆与库相关的宏。这是我的开发 makefile 能够以最小的麻烦调整到我的开发平台(可以是 Linux、Solaris 或 MacOS X)所需要的。对于程序的消费者,有一个 configureautoconf 生成的脚本,因此他们不必担心正确处理这些位。但是,这与此代码具有很强的遗传相似性,包括 UFLAGS 选项。

请注意,许多用于 makefile 构建的系统都有一种与此类似的设置 CFLAGS 的机制 - 并且简单地分配给 CFLAGS 会撤消系统所做的良好工作。但是您必须了解您的 makefile 才能明智地修改它。

]

关于include - 在 Makefile 中为头文件添加目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/341387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com