Ir ao conteúdo
  • Cadastre-se

C Configurar Makefile (Define e Headers)


Midori
Ir à solução Resolvido por Midori,

Posts recomendados

Criei um Makefile para compilar um pacote e acontece alguns erros, este e um deles,

 

./xplore.h:32:10: fatal error: 'alloca.h' file not found
#include <alloca.h>
         ^~~~~~~~~~
1 error generated.

 

Veja que o motivo e a falta de alloca.h no meu sistema, porém no xplore.h tem umas macros para tratar isso, esta e a linha do erro,

 

    23    #ifdef _AIX
    24    #pragma alloca
    25    #else
    26    #ifdef hpux
    27    #pragma alloca
    28    #else
    29    #ifdef __NetBSD__
    30    #pragma alloca
    31    #else
    32    #include <alloca.h>
    33    #endif    /* __NetBSD__ */
    34    #endif    /* hpux */
    35    #endif    /* _AIX */

 

Se eu colocar p.ex #define __NetBSD__ em xplore.h resolvo esse erro, mas tem outros arquivos com essas macros. Como posso fazer isso no Makefile para não ter que editar cada arquivo? Vi que daria para para fazer algo com -D. Mas tentei -D__NetBSD__ e não deu certo, Qual e a forma correta? Uma parte do meu Makefile,

 

CC	= clang
LIBDIR	= -L/usr/local/lib -L./regexp -L./xg
INCDIR	= -I/usr/local/include
DEFINES = -D__NetBSD__ -DNetBSD -DFreeBSD
CFLAGS	= -O3 -Wall -lXm -lXpm -lXt -lICE -lSM -lXmu -lX11

...

all:	${APP}

${APP}: ${OBJS}
	${CC} ${DEFINES} ${CFLAGS} ${OBJS} ${INCDIR} ${LIBDIR} -o ${APP}

 

Outra questão, como faco para incluir um diretorio de headers para que os fontes *.c encontrem ele com #define <header.h> em vez de #include "header.h"? Tentei passar o diretorio para INCDIR e não deu certo, p.ex: -I./xg/include.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

18 horas atrás, Midori disse:

Outra questão, como faco para incluir um diretorio de headers para que os fontes *.c encontrem ele com #define <header.h> em vez de #include "header.h"? Tentei passar o diretorio para INCDIR e não deu certo, p.ex: -I./xg/include.

 

Eu acho que usar a flag -I é exatamente a forma (mais) correta. Tentou usar o endereço absoluto ao invés do relativo? Talvez com $PWD/xg/include ou algo do tipo.

 

18 horas atrás, Midori disse:

Se eu colocar p.ex #define __NetBSD__ em xplore.h resolvo esse erro, mas tem outros arquivos com essas macros. Como posso fazer isso no Makefile para não ter que editar cada arquivo?

 

Eu diria que, a não ser que você saiba exatamente quais serão as consequências de modificar o código, nesse caso, a opção de editar o próprio código pra fazê-lo compilar não é uma boa ideia. Quase sempre indica problemas. O processo de compilação não deveria necessitar modificar o código alvo.

 

18 horas atrás, Midori disse:

Vi que daria para para fazer algo com -D. Mas tentei -D__NetBSD__ e não deu certo, Qual e a forma correta?

 

Porque não deu certo? Por quê os demais arquivos que usavam __NetBSD__ agora precisavam de outras dependências que você não tinha ou algo do tipo? Se sim, então talvez a macro __NetBSD__ definida apenas na xplore.h não faça sentido.

 

Aqui novamente eu acho que a flag -D é a solução mais correta. Seria possível que alloca.h seja parte de outro pacote e que você tenha que instalar essa dependência primeiro antes de compilar?

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Solução

Consegui resolver atribuindo tudo para CFLAGS, assim compila sem erro,

 

INCDIR	= -I/usr/local/include -I./regexp/include -I./xg/include
DEFINES = -D__NetBSD__ -DFreeBSD
CFLAGS	+= -O3 -Wall -lXm -lXpm -lXt -lICE -lSM -lXmu -lX11
CFLAGS  += ${DEFINES} ${INCDIR}

 

2 horas atrás, V!OLADOR disse:

Porque não deu certo? Por quê os demais arquivos que usavam __NetBSD__ agora precisavam de outras dependências que você não tinha ou algo do tipo? Se sim, então talvez a macro __NetBSD__ definida apenas na xplore.h não faça sentido.

Como o meu sistema não tem <alloca.h> tenho que configurar essas macros para não adicionar esse header. Veja que especificamente para isso tambem poderia ser _AIX ou hpux, porém a outra macro faz mais sentido para o meu caso.

 

2 horas atrás, V!OLADOR disse:

Seria possível que alloca.h seja parte de outro pacote e que você tenha que instalar essa dependência primeiro antes de compilar?

não e necessario resolver essa dependencia com a outra condicao da diretiva #pragma alloca.

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!