AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / 问题

Perguntas[make](unix)

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

Como fazer com que todos os alvos no Makefile dependam de um arquivo específico?

  • 6

Aqui, makequero fazer com que todos os alvos no todo Makefiledependam de um arquivo específico. ( MakefileNa verdade, esse arquivo específico é porque é onde tenho todas as minhas fórmulas. Mas isso não vem ao caso.)

Aqui vemos que, como um idiota, adicionei meticulosamente a cada alvo,

$ 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 \

Existe alguma maneira mais inteligente?

Existe algum

.ALL_TARGETS: Makefile #or,
%: Makefile

etc. notação que eu poderia usar para obter o mesmo efeito?

Ou talvez apenas fazê-lo operar em todos os alvos que correspondem a um padrão específico?

Eu estava pensando em usar a %notação, mas infelizmente isso iria reatribuir a lista de comandos de como criar cada alvo...

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

Por que tocar em apenas uma fonte e recompilar novamente o outro arquivo fonte intocado?

  • 6

Apenas tocando no arquivo mod1.c, makedeve apenas recompilar esse arquivo de origem, produzir seu arquivo de objeto correspondente, mod1.o, e não deve recompilar mod2.c, porque o arquivo de objeto mod2.oainda estará completamente atualizado ( mod2.cestá, como intocado, ainda mais antigo que mod2.o, então não há necessidade de recompilar). Mas eu obtenho o seguinte comportamento:
(Esta não é uma criação pessoal, é de um exemplo escrito de uma fonte em make[dizendo o texto que alguém testemunhará como makesabe que mod2.cestá intocado e não o recompilará]).

Faça o arquivo

$ 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) 

O problema:

$ 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

Conteúdo dos arquivos

$ 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 respostas
  • 33 Views
Martin Hope
kellogs
Asked: 2024-07-28 21:50:26 +0800 CST

cc1plus ficando quase inativo depois de um tempo

  • 5

Não importa se eu passo -j3ou -j2comando make.

Mais cedo ou mais tarde, todos os cc1plusprocessos passam de cerca de 100% de uso da CPU para quase nenhum

O que é aquilo ?

insira a descrição da imagem aqui

insira a descrição da imagem aqui

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

Como instalar o autoconf como alternativa no sistema?

  • 6

Estou usando um sistema Ubuntu 18/RHEL6 bastante desatualizado com ferramentas de construção antigas, estou tentando atualizá-lo, mas não quero destruir a instalação das ferramentas existentes. Criei o seguinte script que foi instalado autoconfcomo alternativa, mas não tenho certeza de como trazer as autoconfmacros no arquivo share.

autoreconf --version
autoreconf (GNU Autoconf) 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
Licença GPLv3+/Autoconf: GNU GPL versão 3 ou posterior
https://gnu.org/licenses/gpl.html , https:// gnu.org/licenses/exceptions.html
Este é um software livre: você é livre para alterá-lo e redistribuí-lo.
NÃO HÁ GARANTIA, na medida permitida por lei.

Escrito por David J. MacKenzie e Akim Demaille.

Então, quando tento executar autoreconf --install --force, ele me diz que não foi possível encontrar a macro...

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

Existe uma maneira de realizar o que estou tentando fazer? Tendo automake, autoconf, libtool, etc como alternativas?

O script (tenho um script semelhante para automake,, pkgconfetc):

#!/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 respostas
  • 13 Views
Martin Hope
chipichippichappachapppa
Asked: 2024-05-04 22:01:20 +0800 CST

erro fatal: bsd/string.h: Esse arquivo ou diretório não existe

  • 8

De acordo com a resposta , preciso incluir -lbsd no comando gcc. Mas não tenho ideia de onde devo inseri-lo aqui.

Estou usando 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.

Aqui está o Makefile que preciso compilar:

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

Aqui está o erro que recebo depois de adicionar eu #include <bsd/string.h>mesmo:

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

Eu apreciaria sua ajuda, como sou completamente novato em Makefiles, estou apenas tentando instalar o driver para meu adaptador USB-Ethernet DEXP ZH-UTC2

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

Por que a regra Makefile ainda é executada quando não existem pré-requisitos no diretório atual?

  • 8

Eu tenho um Makefileque diz:

aaa:bbb
    echo 456
bbb:
    echo 123

Quando não há nenhum bbbarquivo no diretório, essas duas regras serão executadas independentemente de haver um  aaaarquivo ou não.

Mas por que?

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

make: *** Sem alvos. Parar

  • 6

por que quando o makecomando no código do código gera um make: *** No targets. Stop. código de erro:

    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 respostas
  • 51 Views
Martin Hope
Stan Huang at Taiwan
Asked: 2024-02-29 17:51:50 +0800 CST

Por que o arquivo de configuração está na lista de parâmetros do comando make?

  • 5

Aqui está a linha de comando que recebi de um fabricante de chips:

make sunxi_defconfig ARCH=arm CROSS_COMPILE=arm-linux-

Certamente falhou com a mensagem de

*** 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

Encontrei sunxi_defconfigna pasta configs/. Por que o arquivo de configuração é sunxi_defconfigcolocado na lista de parâmetros como um destino no makecomando? Estudei makeo manual de comandos com atenção e não encontrei o caso de colocar um arquivo de configuração como alvo de criação. A linha de comando está errada? Como posso consertar isso?

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

Como pedir ao make para nem sempre recriar arquivos dependendo dos alvos .PHONY?

  • 6

Eu tenho isto:

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

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

Então, a lógica é que eu quero gerar novamente obj2.img, se for mais antigo que obj1 (ou nem existir). No entanto, quero um erro se o alvo de "verificação" falhar.

Agora meu problema é que o gerador de obj2.imgsempre roda. Eu acho que pode ser porque checké .PHONY.

De alguma forma, posso pedir ao make para gerar novamente obj2.imgapenas se obj1.imgfor mais recente?

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

O que diz que um arquivo é um arquivo intermediário (e pode ser removido automaticamente)?

  • 6

Estou simplesmente estudando make. E me deparo com a pergunta sobre o arquivo intermediário de remoção automática do make. Eu gostaria de prever melhor como o make marcaria o arquivo intermediário (ou seja, responderia "Removê-lo automaticamente?"), Então escrevi um projeto fictício como este para demonstrar minha pergunta:

olá.h

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

olá.c

#include <stdio.h>

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

main.c

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

makefile

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

Quando eu faço main, requer libmyhello.a. libmyhello.arequer hello.o. Se bem entendi, hello.odeve ser um arquivo intermediário. Mas não foi excluído no make mainprocesso.

Por que é? Como saber se o make irá tratar um arquivo como arquivo intermediário e removê-lo?

make
  • 1 respostas
  • 41 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve