如何在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即可,如:
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)中加入依赖文件的搜索路径(依赖文件不在当前目录)
makefile : 如何链接来自不同子目录的目标文件并包含不同的搜索路径