如何在makefile中指定头文件目录

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在makefile中指定头文件目录相关的知识,希望对你有一定的参考价值。

1、首先在目录HelloMakefile下,创建测试文件main.c。

2、然后运行autoscan,生成autoscan.log,configure.scan,还有main.c。

3、接着将configure.scan文件重命名为configure.in,命令如下:mv configure.scan configure.in。

4、然后修改configure.in中的内容。

5、然后执行aclocal命令,生成aclocal.m4  autom4te.cache两个文件。

6、最后执行autoconf命令,生成重要的configure.in文件。

参考技术A

指定头文件目录,一般都是通过编译器参数-I(大写的I)来指定的,假设头文件目录在:

/home/develop/include

则可以通过:

-I/home/develop/include

将该目录添加到头文件搜索路径中

在makefile中则可以这样写:

CFLAGS=-I/home/develop/include

然后在你编译的时候,引用CFLAGS即可,如:

yourapp:*.c
    gcc $(CFLAGS) -o yourapp

本回答被提问者和网友采纳
参考技术B 例如:在makefile中
INCLUDE = -I /usr/sybase/OCS-12_0/include -I ../SHR \
-I /home/tuxedo/include -I ../ora \
-I /usr/STLport/stlport
然后在连接目标文件的时候:
$(CC) $(CFLAGS) $(INCLUDE) -qtempinc=$(tempIncDir) -qmaxerr=10 -qrtti=all -qsrcmsg -o $(@) -c $<
这里的CC是编译器,CFLAGS是编译参数
那么INCLUDE 就是路径了,最上面的INCLUDE 可以自己设顶了。

如何使 makefile 目标依赖于与目标文件目录同名的文件?

【中文标题】如何使 makefile 目标依赖于与目标文件目录同名的文件?【英文标题】:How do you make a makefile target depend on a file with the same name as the target file's directory? 【发布时间】:2019-11-23 19:49:58 【问题描述】:

假设您有以下项目结构:

.
├── Makefile
└── src
    └── 1.py

程序1.py 在目录build/1 中创建多个(0、1 或更多)文件。这推广到任意数字,即程序x.py,其中x 是某个自然数,将在目录build/x 中创建多个文件。该项目可以包含许多 python(3) 文件。

上述特定场景的生成文件可能如下所示:

PYTHON_FILES := $(shell find src -name '*.py')
TXT_FILES := build/1/test.txt

.PHONY: clean all

all: $(TXT_FILES)

build/1/test.txt: src/1.py
    mkdir -p build/1
    touch build/1/test.txt # emulates: python3 src/1.py
    echo "success!"

clean:
    rm -rf build

使用上述项目结构和 makefile 运行 make 会产生以下项目结构:

.
├── Makefile
├── build
│   └── 1
│       └── test.txt
└── src
    └── 1.py

我如何概括规则头 build/1/test.txt: src/1.py 以处理具有任意数量的 python 程序(或等效地,构建子目录)和每个 python 程序任意数量的输出文件的项目?

【问题讨论】:

【参考方案1】:

您可以将现有规则概括为适用于 src 中的任何 python 代码。在模式规则中使用“%”,在操作列表中使用“$*”来引用数字。

只要修改了 python 测试,该规则就会重新运行测试。只有当python测试表明完成且没有错误时,它才会记录“成功”。

2019 年 11 月 24 日更新:将测试推广到处理 N 个测试,每个测试生成多个文件。重建。

注意 1:需要一种方法来了解 python 测试是否通过而没有任何失败。该解决方案假定 python 代码中的退出代码为非零,或者有另一种方法来判断是否所有测试都已通过。

注意 2:done 文件捕获文件夹中生成的测试文件列表(不包括 test.done 本身)。这可用于验证在单独的目标中是否删除了 NO 输出文件,以补偿进程生成的显式文件的缺失

TASK_LIST=1 2 3 4

all: $TASK_LIST:%=build/%/task.done

build/%/task.done: src/%.py
        mkdir -p build/$*
        touch build/$*/test.txt # emulates: python3 src/1.py
        # Run script src/%.py should return non-zero exit on failure.
        ls build/$* | grep -xv "$(@F)" > $@
        touch $@ # Mark "success!"

GNU Make 文档:https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html

【讨论】:

谢谢,但是这并不能解决问题。如果1.py 同时生成test1.txt 文件和test2.txt 文件会怎样?或者,更一般地说,n 不同的文件?那么根据您的解决方案,您还需要 n distinct 制定规则。 Make 将无法知道应该创建多少个文件。您可以更改规则以创建“已完成”文件,该文件将近似于您想要的行为 - 如果修改了 PY,则重新运行测试。我误解了模板暗示 test.txt 是一个标志文件,而不是一个测试结果文件。我会发布额外的描述。 解决方案已修改为更明确地说明 test.done 作为指标文件的作用,而不是结果集的一部分 + 关于能够知道所有测试是否通过的假设。 感谢您的回答,但您误解了我的问题(或者我无法解释我的问题)。这些文件根本不是测试文件:在我的应用程序中,每个 python 程序都会生成多个图、矩阵和数字,然后我的 LaTeX 文档会自动读取这些图、矩阵和数字。在陈述我的问题时,我试图概括它,但也许“test.txt”是一个不好的示例名称。我要做的就是制定一个规则来构建所有输出文件。我认为这是可能的,因为每个输出文件的文件夹唯一地确定了它的 python 程序。 我当然需要在makefile中的某个变量中明确列出每个输出文件,但我想避免制定多个规则,因为构建过程(只需运行适当的python脚本)是一样的。

以上是关于如何在makefile中指定头文件目录的主要内容,如果未能解决你的问题,请参考以下文章

如何在makefile(nmake使用的makefile)中加入依赖文件的搜索路径(依赖文件不在当前目录)

make命令和makefile

makefile:如何生成目标文件到上层目录

makefile : 如何链接来自不同子目录的目标文件并包含不同的搜索路径

如何修改makefile以将更改的源编译到对象目录中,文件列表除外

请教多文件夹makefile问题