AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题

问题[make](unix)

Martin Hope
Dan Jacobson
Asked: 2024-11-10 17:51:48 +0800 CST

如何使 Makefile 中的所有目标都依赖于特定的文件?

  • 6

在这里,make我想让整体中的所有目标都Makefile依赖于特定文件。(Makefile事实上,那个特定文件就是,因为我的所有公式都在那里。但这不是重点。)

在这里我们看到我像个傻瓜一样费力地将它添加到每个目标中,

$ grep Y Makefile
Y = Makefile
h32540000_zong.csv: $Y; $L | perl -pwle 'BEGIN{$$b=3; $$start=5;};$w; s/@\s+/\n/g;' > $@
h32540000_heng.csv: $Y; $L | perl -pwle \
h32540001_zong.csv: $Y; $L | perl -pwle 'BEGIN{$$start=8;};$w;$(\
h32540001_wall_zong.csv: $Y; $L | perl -wple \
h32540001_heng.csv: $Y; $L | perl -pwle \
h32540001_wall_heng.csv: $Y; $L | perl -pwle \

有没有更聪明的方法?

有没有

.ALL_TARGETS: Makefile #or,
%: Makefile

我可以使用什么符号来实现相同的效果?

或者也许只是让它对符合特定模式的所有目标进行操作?

我本来想使用%符号,但遗憾的是这会重新分配如何制作每个目标的命令列表......

make
  • 1 个回答
  • 27 Views
Martin Hope
nostromo
Asked: 2024-08-28 00:25:19 +0800 CST

为什么只触及一个源文件,就再次重新编译另一个未触及的源文件?

  • 6

只需触碰文件mod1.c,make就应该重新编译该源文件,生成其对应的目标文件 ,mod1.o而不应重新编译mod2.c,因为目标文件mod2.o仍将完全保持最新状态(mod2.c未触碰,但比 更旧mod2.o,因此无需重新编译)。但我得到了以下行为:(
这不是个人创作,而是来自来源的书面示例[说明人们将见证如何知道未触碰并且不会重新编译它的make文本])。makemod2.c

Makefile

$ cat Makefile
SRC = mod1.c mod2.c main.c
OBJ = mod1.o mod2.o main.o
PROG = dbtest
            
$(PROG): $(OBJ)
        gcc $(OBJ) -o $(PROG)

$(OBJ): $(SRC) 

问题:

$ make      
make: 'dbtest' is up to date.
                                                                                        
$ touch mod1.c
                                                                                        
$ make
cc    -c -o mod1.o mod1.c
cc    -c -o mod2.o mod2.c
cc    -c -o main.o main.c
gcc mod1.o mod2.o main.o -o dbtest

文件内容

$ cat mod1.c  
#include <stdio.h>

void foo() {
        printf("Hello ");
}
                                                                                        
$ cat mod2.c
#include <stdio.h>

void bar() {
        printf(“World\n”);
}

$ cat main.c
#include <stdio.h>
void foo();
void bar();

int main (void) {
       foo();
       bar();

       return 0;
}
make
  • 1 个回答
  • 33 Views
Martin Hope
kellogs
Asked: 2024-07-28 21:50:26 +0800 CST

cc1plus 一段时间后几乎处于空闲状态

  • 5

-j3无论我传球还是-j2指挥都没关系make。

所有进程的 CPU 使用率迟早cc1plus都会从 100% 左右降至几乎为零

那是什么 ?

在此处输入图片描述

在此处输入图片描述

make
  • 1 个回答
  • 25 Views
Martin Hope
codenamezero
Asked: 2024-06-29 03:18:06 +0800 CST

如何在系统中安装 autoconf 作为替代方案?

  • 6

我正在使用一个相当过时的 Ubuntu 18/RHEL6 系统和旧的构建工具,我正在尝试更新它,但不想破坏现有的工具安装。我创建了以下脚本作为替代方案安装,但我不确定如何将安装中的宏autoconf带过来。autoconfshare

autoreconf --version
autoreconf (GNU Autoconf) 2.71
版权所有 (C) 2021 Free Software Foundation, Inc.
许可证 GPLv3+/Autoconf:GNU GPL 版本 3 或更高版本
https://gnu.org/licenses/gpl.html , https://gnu.org/licenses/exceptions.html
这是免费软件:您可以自由更改和重新分发它。
在法律允许的范围内,不提供任何保证。

由 David J. MacKenzie 和 Akim Demaille 编写。

然后,当我尝试运行时autoreconf --install --force,它会告诉我找不到宏......

autoreconf --verbose --install --force
autoreconf: export WARNINGS=
autoreconf: Entering directory '.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force -I m4
autoreconf: configure.ac: tracing
autoreconf: running: libtoolize --copy --force
libtoolize: putting auxiliary files in '.'.
libtoolize: copying file './ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: copying file 'm4/libtool.m4'
libtoolize: copying file 'm4/ltoptions.m4'
libtoolize: copying file 'm4/ltsugar.m4'
libtoolize: copying file 'm4/ltversion.m4'
libtoolize: copying file 'm4/lt~obsolete.m4'
autoreconf: configure.ac: not using Intltool
autoreconf: configure.ac: not using Gtkdoc
autoreconf: running: aclocal --force -I m4
autoreconf: running: /opt/autoconf/bin/autoconf --force
configure.ac:1040: error: possibly undefined macro: m4_ifdef
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: error: /opt/autoconf/bin/autoconf failed with exit status: 1

有没有什么方法可以完成我想做的事情?有、、automake等替代方案吗?autoconflibtool

脚本(我有一个类似的脚本automake,pkgconf等等):

#!/bin/bash
set -e

WHAT=autoconf
VERSION=2.71

function install() {
    [ $# -eq 0 ] && { run_error "Usage: install <version>"; exit; }
    local VERSION=${1}
    local TARBALL=${WHAT}-${VERSION}.tar.xz
    local URL=ftp://ftp.gnu.org/gnu/${WHAT}/${TARBALL}
    local WHERE=/tmp/update-${WHAT}
    echo "Downloading ${URL}"
    mkdir -p ${WHERE}
    cd ${WHERE}
    curl -L --create-dirs -o ${TARBALL} ${URL}

    if [ -f "${TARBALL}" ]; then
        tar -xf ${TARBALL}
        cd ${WHAT}-${VERSION}/
        ./configure --prefix="/opt/${WHAT}"
        make
        echo "Installing..."
        sudo make install
        echo -e "${TARBALL} installed \e[1;32mOK\e[39m"
    else
        echo -e "Cannot download ${URL}"
        exit 1
    fi
}

function install_alternatives() {
    for fullpath in /opt/${WHAT}/bin/* ; do
        local NAME="$(basename ${fullpath})"
        #echo "sudo update-alternatives --install /usr/local/bin/${NAME} ${NAME} ${fullpath} 50"
        sudo update-alternatives --install /usr/local/bin/${NAME} ${NAME} ${fullpath} 50
        . ~/.profile
    done
}

function remove_alternatives() {
    for fullpath in /opt/${WHAT}/bin/* ; do
        local NAME="$(basename ${fullpath})"
        #echo "sudo update-alternatives --remove ${NAME} ${fullpath}"
        sudo update-alternatives --remove ${NAME} ${fullpath}
        . ~/.profile
    done
}

if declare -f "$1" > /dev/null
then
    "$@"
else
    install ${VERSION}
    install_alternatives
fi
make
  • 1 个回答
  • 13 Views
Martin Hope
chipichippichappachapppa
Asked: 2024-05-04 22:01:20 +0800 CST

致命错误:bsd/string.h:没有这样的文件或目录

  • 8

根据答案,我需要将 -lbsd 包含到 gcc 命令中。但我不知道应该将它插入这里的哪里。

我正在使用 Ubuntu 24.04 Linux vivobook16-m1605xa-mb089 6.8.0-31-generic #31-Ubuntu SMP PREEMPT_DYNAMIC Sat Apr 20 00:40:06 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux,.

这是我需要编译的 Makefile:

SHELL := /bin/bash

TARGET  = ax_usb_nic
KDIR    = /lib/modules/$(shell uname -r)/build
PWD = $(shell pwd)
CFILES  = ax_main.c \
      ax88179_178a.c \
      ax88179a_772d.c
EXTRA_CFLAGS = -DEXPORT_SYMTAB -fno-pie
ifneq (,$(filter $(SUBLEVEL),14 15 16 17 18 19 20 21))
MDIR    = kernel/drivers/usb/net
else
MDIR    = kernel/drivers/net/usb
endif

$(TARGET)-objs := $(CFILES:.c=.o)
obj-m := $(TARGET).o

all:
    make -C $(KDIR) M=$(PWD) modules
    $(CC) ax88179_programmer.c -o ax88179_programmer
    $(CC) ax88179a_programmer.c -o ax88179a_programmer
    #$(CC) ax_ioctl.c -o ax_ioctl

install:
ifneq (,$(wildcard /lib/modules/$(shell uname -r)/$(MDIR)/ax88179_178a.ko))
    gzip /lib/modules/$(shell uname -r)/$(MDIR)/ax88179_178a.ko
endif
    make -C $(KDIR) M=$(PWD) INSTALL_MOD_DIR=$(MDIR) modules_install
    depmod -A

clean:
    make -C $(KDIR) M=$(PWD) clean
    rm -f ax88179_programmer ax88179a_programmer ax_ioctl

这是我自己添加后收到的错误#include <bsd/string.h>:

make -C /lib/modules/6.8.0-31-generic/build M=/home/lelechko/Downloads/dexp-zh-utc2_drajver_100507_30082022/AX88772D-AX88179A-Drive/ASIX_USB_NET_Linux_Driver_v1.0.0_b7_Source/ASIX_USB_NET_Linux_Driver_v1.0.0_Source_b7 modules
make[1]: Entering directory '/usr/src/linux-headers-6.8.0-31-generic'
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0
  You are using:           gcc-13 (Ubuntu 13.2.0-23ubuntu4) 13.2.0
  CC [M]  /home/lelechko/Downloads/dexp-zh-utc2_drajver_100507_30082022/AX88772D-AX88179A-Drive/ASIX_USB_NET_Linux_Driver_v1.0.0_b7_Source/ASIX_USB_NET_Linux_Driver_v1.0.0_Source_b7/ax_main.o
/home/lelechko/Downloads/dexp-zh-utc2_drajver_100507_30082022/AX88772D-AX88179A-Drive/ASIX_USB_NET_Linux_Driver_v1.0.0_b7_Source/ASIX_USB_NET_Linux_Driver_v1.0.0_Source_b7/ax_main.c:4:10: fatal error: bsd/string.h: No such file or directory
    4 | #include <bsd/string.h>
      |          ^~~~~~~~~~~~~~
compilation terminated.
make[3]: *** [scripts/Makefile.build:243: /home/lelechko/Downloads/dexp-zh-utc2_drajver_100507_30082022/AX88772D-AX88179A-Drive/ASIX_USB_NET_Linux_Driver_v1.0.0_b7_Source/ASIX_USB_NET_Linux_Driver_v1.0.0_Source_b7/ax_main.o] Error 1
make[2]: *** [/usr/src/linux-headers-6.8.0-31-generic/Makefile:1926: /home/lelechko/Downloads/dexp-zh-utc2_drajver_100507_30082022/AX88772D-AX88179A-Drive/ASIX_USB_NET_Linux_Driver_v1.0.0_b7_Source/ASIX_USB_NET_Linux_Driver_v1.0.0_Source_b7] Error 2
make[1]: *** [Makefile:240: __sub-make] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-6.8.0-31-generic'
make: *** [Makefile:20: all] Error 2

我很感激你的帮助,因为我在 Makefiles 中完全是菜鸟,我只是想为我的 DEXP ZH-UTC2 usb-ethernet 适配器安装驱动程序

make
  • 1 个回答
  • 271 Views
Martin Hope
lcWhhx
Asked: 2024-04-10 18:25:07 +0800 CST

为什么当前目录中不存在先决条件时 Makefile 规则仍然执行?

  • 8

我有一个Makefile说:

aaa:bbb
    echo 456
bbb:
    echo 123

bbb当目录中 没有文件时,无论是否有aaa文件都会执行这两条规则。

但为什么?

make
  • 1 个回答
  • 119 Views
Martin Hope
German Enjoy
Asked: 2024-04-06 05:27:36 +0800 CST

make: *** 无目标。停止

  • 6

为什么当make代码中的命令抛出错误时make: *** No targets. Stop. 代码:

    NAME := program
FLAG := -std=c11 -Wall -Wextra -Werror -Wpedantic

all: $(NAME)

$(NAME): *.c
  clang $(FLAG) -o $(NAME) *.c -lm

clean:
  rm -rf $(NAME)

reinstall: clean all
make
  • 1 个回答
  • 51 Views
Martin Hope
Stan Huang at Taiwan
Asked: 2024-02-29 17:51:50 +0800 CST

为什么配置文件在make命令的参数列表中?

  • 5

这是我从芯片制造商那里得到的命令行:

make sunxi_defconfig ARCH=arm CROSS_COMPILE=arm-linux-

它肯定失败了,消息如下

*** Error during writing of the configuration.
make[1]: *** [scripts/kconfig/Makefile:121: nanopi_h3_defconfig] Error 1
make: *** [Makefile:479: nanopi_h3_defconfig] Error 2

我sunxi_defconfig从文件夹中找到了configs/。为什么配置文件sunxi_defconfig作为命令目标放在参数列表中make?我make仔细研究了命令手册,没有发现将配置文件作为制作目标的情况。是不是命令行写错了?我该如何修复它?

make
  • 1 个回答
  • 28 Views
Martin Hope
peterh
Asked: 2023-09-25 23:30:15 +0800 CST

如何要求 make 不总是根据 .PHONY 目标重新创建文件?

  • 6

我有这个:

.PHONY: check
check:
    script-returning-nearly-always-zero

obj2.img: obj1.img check
    make-obj2-from-obj1

所以,逻辑是我想重新生成obj2.img,如果它比 obj1 更旧(或者它甚至不存在)。但是,如果“检查”目标失败,我想要一个错误。

现在我的问题是 的生成器obj2.img总是运行。我想,可能是check因为.PHONY。

obj2.img我可以以某种方式要求 make仅在obj1.img更新时重新生成吗?

make
  • 1 个回答
  • 23 Views
Martin Hope
Koala Yeung
Asked: 2023-08-11 18:04:09 +0800 CST

什么告诉 make 文件是中间文件(并且可以自动删除)?

  • 6

我只是在学习make。我偶然发现了关于 make 的自动删除中间文件的问题。我想更好地预测 make 如何标记文件中间(即回答“会自动删除它吗?”),所以我编写了一个像这样的虚拟项目来演示我的问题:

你好.h

#ifndef HELLO_H
#define HELLO_H
void hello(const char *name);
#endif

你好ç

#include <stdio.h>

void hello(const char *name) {
    printf("Hello %s\n", name);
}

主程序

#include "hello.h"
int main() {
    hello("world");
    return 0;
}

生成文件

all: main
    ./main

clean:
    rm -f *.o *.a
    rm -f main

hello.o:
    gcc -c hello.c

libmyhello.a: hello.o
    ar -crv $@ hello.o

main: libmyhello.a
    gcc -L. -o $@ [email protected] -lmyhello

.PHONY: all clean

当我制作时main,它需要libmyhello.a。libmyhello.a需要hello.o. 如果我没理解错的话,hello.o应该是一个中间文件。但在此过程中并未被删除make main。

为什么?如何判断 make 是否会将文件视为中间文件并将其删除?

make
  • 1 个回答
  • 41 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve