标签: gnu-make

GCC构建问题(#include_next limits.h)

当我尝试

$ make depend -f gcc.mak

在我的Ubuntu机器上的中间件我得到了这个

/usr/include/../include/limits.h:125:26: error: no include path in which to search for limits.h

这是limits.h:125附近的内容:

/* Get the compiler's limits.h, which defines almost all the ISO constants.

    We put this #include_next outside the double inclusion check because
    it should be possible to include this file more than once and still get
    the definitions from gcc's header.  */
#if defined __GNUC__ && !defined _GCC_LIMITS_H_
/* `_GCC_LIMITS_H_' is what GCC's file defines.  */
# include_next <limits.h>
#endif

我尝试过设置 …

c++ linux gcc g++ gnu-make

10
推荐指数
1
解决办法
2万
查看次数

bmake的优点

除了bmake相当于GNU make的BSD之外,我无法清楚地理解它比GNU make更具优势.谁能帮我?我只能找到一个有点帮助的资源.更多的帮助或指示表示赞赏.

谢谢,帕布

makefile build gnu-make bsdmake

10
推荐指数
3
解决办法
4095
查看次数

GNU Makefile相当于shell'TRAP'命令,用于在退出时简明地识别构建失败

标准:Makefile是一个GNU Make Makefile - 我对makepp,qmake,cmake等不感兴趣.他们都很好(特别是cmake),但这是为了工作和工作,我们使用GNU Make.最佳解决方案是纯Makefile解决方案,而不是解析为您制作的shell脚本.

我也不想做一个"继续失败"的解决方案 - 如果它被破坏了,它就会被打破,需要修复.

情况就是这样,我有一个并行构建多个目录的makefile - 如果其中一个失败,当然整个构建失败,但直到所有运行都运行完成(或失败).这意味着make实际失败的原因被埋没在make的输出结尾任意远的地方.

这是我所拥有的一个例子:

all: $(SUBDIRS)

SUBDIRS = \
  apple \
  orange \
  banana \
  pineapple \
  lemon \
  watermelon \
  grapefruit

$(SUBDIRS):
  cd $@ && $(MAKE) $(MFLAGS) 2>&1 | sed -e "s/^/$(notdir $(@)): /g"
Run Code Online (Sandbox Code Playgroud)

如果我运行'make -j 5'并且'orange'碰巧失败了 - 我想在make过程结束时看到这样的表

  apple     - passed
  orange    - FAILED
  banana    - passed
  pineapple - passed
  lemon     - passed
Run Code Online (Sandbox Code Playgroud)

我考虑过&& echo"传递"> .result || echo"FAILED"> .result,但仍需要某种TRAP或__onexit()清理命令在退出时打印它们.

任何Makefile ninjas都有一个pure-makefile解决方案吗?

un-edit - 我的解决方案实际上并没有按照我希望的方式工作..简而言之!

gnu makefile gnu-make

10
推荐指数
1
解决办法
2715
查看次数

GNU Make有哪些好的资源?

我已经阅读了大约1/3的GNU Make手册,你们知道有什么资源可以真正学习使用Make的艺术.

理想情况下,可能会有一些例子,其中有两种做法可行,作者解释了他选择的方法和原因.

我主要使用Make不构建C/C++程序,而是运行处理管道进行数据分析.

gnu-make

10
推荐指数
2
解决办法
3183
查看次数

GNU Make.范围限制为单个Makefile的变量

我尝试在我当前的项目中实现一个非递归的make构建系统.我挣扎的是变量范围.目标特定变量不符合我的需要,因为通常变量定义目标而不是先决条件.我需要的是:

Makefile1:

SOMEVAR := original_value
include Makefile2
$(warning $(SOMEVAR))
Run Code Online (Sandbox Code Playgroud)

Makefile2:

#some magic here to do what I want and make me happy
SOMEVAR := included_value
#and maybe here
Run Code Online (Sandbox Code Playgroud)

我想要的输出是'original_value'.

有什么策略可以让它成真吗?

编辑:我目前唯一的解决方案是强制和组织自己将所有inlcudes放在每个特定Makefile的末尾并使用立即变量赋值:=

makefile gnu-make

10
推荐指数
1
解决办法
4033
查看次数

是否有Cygwin的Cygwin版本?

Android的NDK需要双方 的Cygwin GNU制作.由于我已经安装了最新和最好的Cygwin,我认为GNU Make必须已经包含在其中,因为Cygwin非常适合开发人员.

但我找不到任何东西,无论是在我的本地安装中,还是在软件包列表中,这让我很好奇地理解为什么在所有GNU软件包中,这是Cygwin选择不包含的软件包.

或者也许这样的Cygwin版本的GNU make存在而我却找不到它?

如果是这样,我在哪里/如何下载它?

cygwin gnu-make

10
推荐指数
1
解决办法
1万
查看次数

为什么.SECONDARY不能用于模式(%)而.PRECIOUS呢?

我的问题是更好地理解我在制作过程中错过的内容和.SECONDARY目的与.PRECIOUS,而不是让我的脚本工作,因为它确实有效.

我正在使用make来打开文件上的emacs编辑器(java但与此问题无关)或者如果不存在则使用模板创建它.

如果它适用于现有文件,则在使用生成的文件时,最后会将其删除.

我在.SECONDARY中添加了先决条件但没有帮助,我不得不将其添加到.PRECIOUS中.

这就是为什么不在它工作的问题.SECONDARY?.

从我在SO上找到的 .SECONDARY不能用于模式(%),但即使知道它是否是设计或是否是make中的错误.(.SECONDARY用于GNU MakeMakefile模式规则的模式规则要么忽略虚假规则,要么自发删除输出文件)

这里是我的Makefile的精简内容,以重现我的问题(请创建一个com/stackoverflow/question目录来测试它).

PACKAGE=com.stackoverflow.question
PACKAGE_DIR=$(subst .,/,$(PACKAGE))
OUT=out

clean:
    find $(OUT) -name "*.class" -type f -print0|xargs -0 rm

# does not work : deleted at end due to intermediate file removal.
$(PACKAGE_DIR)/%.java:
    @echo "package com.stackoverflow.question;\npublic class $(subst .java,,$(subst $(PACKAGE_DIR)/,,$@))\n{\n /** TODO */ \n}" >$@ 

work/%: $(PACKAGE_DIR)/$(subst work/,,%).java
    emacs $<

.PHONY: clean work/%

# tried to avoid intermediate file removal : does not work
.SECONDARY: $(PACKAGE_DIR)/%.java 

# …
Run Code Online (Sandbox Code Playgroud)

gnu makefile gnu-make

10
推荐指数
2
解决办法
2317
查看次数

在g ++参数中使用时,"$ <"是什么意思?

我正在使用一个具有示例应用程序的库.样本makefile包含$<在参数中:

all:test.cpp
    g++ -Wl,--no-as-needed -o Example $<
clean:
    rm -f SampleApp11
Run Code Online (Sandbox Code Playgroud)

我看了这个,教程点

$ <导致操作的相关文件的名称.

另一个网站指出:

这是从.c构建.o的后缀替换规则,它使用自动变量$ <:规则的先决条件的名称(.c文件)和$ @:规则的目标名称(.o.文件)(参见关于自动变量的gnu make manual部分).co:$(CC)$(CFLAGS)$(INCLUDES)-c $ <-o $ @

我仍然感到困惑,这意味着什么?

makefile gnu-make

10
推荐指数
2
解决办法
1348
查看次数

多个特定于目标的变量值

按照文档管理特定目标的变量值

prog : CFLAGS = -g
prog : prog.o foo.o bar.o
Run Code Online (Sandbox Code Playgroud)

我可以设置特定于目标的变量。

现在我的问题是,如何设置多个特定于目标的变量。我必须一一设置吗?

dev_deploy: env = dev
dev_deploy: image = abc
dev_deploy: tag = 1.0.4-dev
dev_deploy:
      docker run -t --rm -e env=$(env) \
         $(image):$(tag) \
         sh -c "test.sh"


prod_deploy: env = prod
prod_deploy: image = abc
prod_deploy: tag = 1.0.3-prod
prod_deploy:
      docker run -t --rm -e env=$(env) \
         $(image):$(tag) \
         sh -c "test.sh"
Run Code Online (Sandbox Code Playgroud)

有什么方法可以用简单的方法设置本地环境(特定于目标的变量)?

makefile gnu-make docker

10
推荐指数
2
解决办法
2244
查看次数

符号“|” 依赖

符号|是什么意思 意味着依赖列表中,例如

foobar: foo | bar
  do_something ....
Run Code Online (Sandbox Code Playgroud)

其中foobar是 makefile 生成的目标。

makefile gnu-make

10
推荐指数
1
解决办法
2449
查看次数

标签 统计

gnu-make ×10

makefile ×7

gnu ×2

bsdmake ×1

build ×1

c++ ×1

cygwin ×1

docker ×1

g++ ×1

gcc ×1

linux ×1