问题标签 [multiple-makefiles]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
environment-variables - 无法在另一个生成文件中执行一个生成文件
一些背景知识:我有一个基于 ESP-IDF 的项目,它有一个复杂的内置构建系统,您可以使用自己的 makefile 插入该系统(他们使用它的文档)。
这工作正常(除了偶尔可怕的构建时间),但现在我想为组件的单元测试添加一个构建目标,这需要针对另一个项目(the unit-test-app
)构建这个组件。
make
所以,我需要另一个构建目标,它使用另一个生成文件和目录调用另一个。像这样的东西很好用:
但前提是我从 bash 执行它。如果我尝试从另一个 makefile 执行它,它要么找不到一些头文件(主项目和单元测试项目的包含路径不同),要么忽略项目(-C
参数)的更改并执行主项目构建。
我尝试了什么:
- 在自定义目标中使用
$(MAKE)
,$(shell which $(MAKE))
和make
- 使用
env -i $(shell which $(MAKE) ) -C ...
with 将所需的环境参数转发给子 make - 使用
bash -l make -C ...
和bash -c make -C ...
什么可行,但很脏:echo $(MAKE) -C ...
在 make 目标中使用,然后$(make tests)
从命令行运行。
据我所知,这是父makefile在我没有将子makefile与之分开的环境中设置的问题。我还能做些什么来将这两者分开?
更新:我创建了一个更清楚地显示问题的示例项目,请查看https://github.com/chanibal/esp-idf-template-with-unit-testsMakefile
的顶部
makefile - Makefile:包含第二个文件时重铸宏
我有一个包含两个这样的 make 文件:
问题是两者的输出都是/src
但应该是/
。
这是怎么发生的,我该如何解决这个问题?
recursion - 如何制作将相同命令应用于子目录的单个makefile?
为清楚起见,我在带有GnuWin32 make
的 Windows 上运行它。
我有一组目录,其中包含多个不同级别的降价文件 - 理论上它们可能位于分支节点中,但我认为目前它们仅位于叶节点中。我有一组pandoc/LaTeX命令可以运行以将降价文件转换为 PDF——显然,如果降价文件已更新,我只想重新创建 PDF,所以 amakefile
似乎合适。
我想要的是makefile
根目录中的单个,它遍历任何和所有子目录(到任何深度)并应用我将为运行pandoc指定的 make 规则。
根据我所能找到的,recursive makefiles
要求您makefile
在每个子目录中都有一个(这似乎是我想避免的管理开销)和/或要求您在开始时列出所有子目录的makefile
(再次,宁愿避免这种情况)。
理论文件夹结构:
我如何编写一个makefile来处理这种情况?
makefile - 在多个 Makefile 中包含 Makefile 和 Echo 变量
在我最近不得不查看的 Makefile 中,它包括这个include $(MAKERULES)
现在对我来说,我会想到它拥有的makefile顶部的某个地方,MAKERULES = xyz
但它没有。所以我打印出 MAKERULES
然后我做测试。它运行并打印出另一个 Makefile Location,Makefile2。
X/Y/Z/Makefile2 路径。我进入这个 Makefile 并尝试写出一些 echo 语句,以便我可以看到正在打印的内容,但没有打印出来。
是否可以从我的本地 Makefile (Makefile) 引用的另一个 Makefile (Makefile2) 中打印出变量?
makefile - 'make' 命令运行 ./configure
所以,我从源代码编译apt,我需要在运行./configure
之前运行make
。但是为什么,当运行make
命令时,它会运行./configure
。为什么./configure
当我跑步时它正在运行make
?因为make
重新配置呢?
笔记
Makefile
我在 apt 源代码文件夹中看到一个多个文件。
bash - MacOS catalina Makefile 无法正确处理在 CLI 中工作的 shell 命令
TL;博士:
这在 MacOS (catalina) 的 Makefile 中不起作用:
但是在命令行上执行时,用$(all_makefiles_except_current)
正确的路径替换,它可以工作。
深入解释
嘿,
我在 Makefile 中有以下代码:
这样做是包含repos
变量中指定的所有 Makefile,获取所有包含文件的列表,设置在 中all_makefiles_except_current
,然后尝试从以 .结尾的 Makefile 中获取所有目标-setup
。
这是包含的 Makefile 中的示例:
这是一个自我记录的 makefile。
如果我运行 shell 命令:
注意:在 windows 和 linux 上,grep 正则表达式必须没有单引号,例如:grep -h -E .+-setup:.*##
在命令行IT WORKS上,我得到了我想要的目标,这将在 Windows (msys2)、Linux (ubuntu) 和 MacOS (catalina) 上运行。
但在 Makefile 中,MacOS 中的grab_setup_rule
始终为空。似乎它没有得到正确处理。
我grab_setup_rule
在 MacOS 上做错了什么?
makefile - 如何创建用于从子目录中的其他 Makefile 编译多个驱动程序的 Makeflow
我对 GNU makefiles 比较陌生,目前我的工作是,我需要在 makefile 中为项目创建一个目标来编译一堆驱动程序。每个驱动程序已经在自己的构建目录中创建了自己的makefile,并且每个驱动程序需要调用的目标是相同的。IE。对于驱动程序 A 和驱动程序 B,必须调用“make shared”。
我目前的想法是在主 makefile 中定义每个驱动程序的路径,如下所示:
从这里开始,我真正想做的是为每个 DRIVER_A、DRIVER_B 和 DRIVER_C 调用相同的过程,即:
因此,为了实现这一点,我尝试将 DRIVER_A、DRIVER_B 和 DRIVER_C 放入一个对象中,例如
然后在 DRIVER_SOURCES 上调用目标
但这不起作用,因为没有规则为 DRIVER_A、DRIVER_B 和 DRIVER_C 制定目标,这在事后看来对我来说是有意义的,但是我不知道另一种方法来完成我想要完成的事情。
我也愿意为每个驱动程序调用 make 的更好方法,而不是 cd'ing 到它的目录并调用 make,我确信有一种更清洁的方法,但我只是马上开始使用功能。
任何帮助都会很棒,如果需要更多信息,请告诉我,如果我遗漏了什么,我深表歉意,我对在堆栈溢出上发帖还很陌生。
编辑:我在第 4 个代码块中打错字,将“DRIVER_A”替换为 $@
gnu-make - 如何使用 GNU make 编译多个简单的项目
我正在尝试从编程书中实现各种项目。我的意图是让每个项目在其自己的文件夹中进行练习,然后有一个 makefile 将所有项目编译为make all
. 文件夹结构是这样的:
我想学习如何建立这样的结构。特别是顶部makefile访问那里src
调用的所有文件夹的部分make
,然后将可执行文件复制并重命名到bin
文件夹中。
c++ - 使用 riscv 链接器链接某些库时出现问题
我正在尝试使用此处创建的编译器(riscv64-linux)编译一组文件。但是,我有一些问题,我认为是我对图书馆的误解造成的。
我将库 libgcc 包含在 Makefile 中,并在 LINKER_FLAGS 部分带有标志 -lgcc。但是,我得到以下输出:
当我执行
$ riscv64-linux-ld --verbose | grep SEARCH_DIR | tr -s ' ;' \\012
以查看 riscv64-linux-ld 在哪里寻找库时,我得到了多个路径。其中之一是
/home/luna/noelv-buildroot/output/host/riscv64-buildroot-linux-musl/lib"
。
但是,当我看到该路径的内容时,我可以找到 libgcc 库:
这让我想知道:
这真的意味着图书馆就在这条路上吗?
如何向该编译器的 SEARCH_DIR 添加路径?
我认为它可能会发生,因为它需要一个静态库。为此,我尝试通过添加 Makefile 来链接静态 libgcc 库 (libgcc.a)
LINKER_INCLUDES = -L/home/laumecha/noelv-buildroot/output/host/lib/gcc/riscv64-buildroot-linux-musl/8.3.0/
,在此路径中,我们可以找到 libgcc.a。为什么链接器仍然找不到 -lgcc?当我添加
LINKER_FLAGS += -lm -static -lgcc -nostartfiles -L/home/luna/noelv-buildroot/output/build/host-gcc-final-8.3.0/build/riscv64-buildroot-linux-musl/libgcc/
到链接器标志时,我得到了多个未定义的引用:
这是否意味着我已成功链接图书馆而我错过了其他图书馆?
注意:我没有从 Makefile 中放置代码,因为我知道我的问题来自我的基本概念,并且 Makefile 是在一些官方网站上制作的。
makefile - 将新的 fortran90 模块包含到现有的大型 fortran90 模型中
我是fortran90的初学者。我想做的是从由 fortran90 编写的现有巨大模型中调用一个新模块(也是 fortran90)。我所知道的是,运行 fortran 脚本高度依赖于 gfortran 使用 make 或 cmake 进行的编译。&将编译make
& 。我检查了一下,这个巨大的模型使用带有大型 Makefile 的命令。我想使用的新模块包含几个文件。所以不可能简单地将这个模块写入模型的一个现有 .f90 文件中......而且有一件事是,我只想在现有 fortran90 模型的 ONE 子程序中使用这个新模块。cmake
Makefile
CMakefile
make
.f90
对于新模块,它是从 GitHub 下载的,编译由cmake
. 首先我需要运行一个 bash 文件!sh build_steps.sh
(!
用于在 python 终端中运行 bash 命令)。!sh build_steps.sh
简单如下:
然后CMakelists.txt
如下:
Makefile
太长了,所以我把它保存在谷歌文档https://docs.google.com/document/d/10naj1WgE9P4qbILT3n85TosZCd1KISwSzGw2u5FIOwo/edit?usp=sharing中。(这个模型是开源的......)
Make
我对 bash 有所了解,但对and一无所知Cmake
。所以我只想知道,有没有一种简单的方法来组合这两个makefile?如何在现有的 makefile 中声明子例程依赖项?或者只是简单地在现有的 fortran 90 子例程中导入新模块,就像import numpy
在 python 中一样。还是我需要一一改变依赖?
非常感谢!