Alterando o comando default make [closed]

1

Estou cursando o HarvardX: CS50x Introdução à Ciência da Computação. Normalmente para fazer este curso você tem que usar uma máquina virtual para rodar um sistema Fedora chamado cs50, com todas as coisas facilitadas, mas eu já uso o Kubuntu, então baixei o clang e a biblioteca cs50 e eu quero mudar as opções padrão de make para incluir a biblioteca e parar quando houver erros no programa c que eu tento compilar. Na aplicação, o comando make faz: clang -ggdb3 -00 -std=c99 -Wall -Werror -argv-2.c -lcs50 -lm -o argv-2 . Seria bom se você pudesse explicar o que deveria ser incluído e por quê. Quando eu compilo um arquivo .c usando make, ele não carrega a biblioteca cs50 e eu obtenho: função indefinida ...

Eu tentei escrever $ nano ~/.bashrc . Em seguida, foi até o final do arquivo e colocou

 #CS50 alias for C compiling:
 alias makec='gcc -ggdb3 -std=c99 -Wall -Werror -argv-2.c -lcs50 -lm -o -argv-2'

Então $ source .bashrc

Quando eu faço $ makec hello agora diz:

gcc: error: hello: No such file or directory
gcc: error: unrecognized command line option ‘-argv-2.c’
    
por Arturo 25.10.2014 / 18:21

4 respostas

0
export CC=gcc
export CFLAGS="-ggdb3 -O0 -std=c99 -Wall -Werror"
export LDLIBS="-lcs50 -lm"

-ggdb

       Produce debugging information for use by GDB.  This means
       to use the most expressive format available (DWARF 2,
       stabs, or the native format if neither of those are
       supported), including GDB extensions if at all possible.

-ggdblevel

       Request debugging information and also use level to specify
       how much information.  The default level is 2.

       Level 3 includes extra information, such as all the macro
       definitions present in the program.  Some debuggers support
       macro expansion when you use -g3.

-O0

       Reduce compilation time and make debugging produce the
       expected results.  This is the default. (Is a optimization option)

-Wall

       Turns on all optional warnings which are desirable for
       normal code.  At present this is -Wcomment, -Wtrigraphs,
       -Wmultichar and a warning about integer promotion causing a
       change of sign in "#if" expressions.  Note that many of the
       preprocessor's warnings are on by default and have no
       options to control them.

-Werror

       Make all warnings into hard errors.  Source code which
       triggers warnings will be rejected.

-lm

       possibly loads a math library.
    
por Arturo 26.10.2014 / 09:03
0

O que você precisa fazer está relacionado aos programas gcc e ld. As variáveis de ambiente C_INCLUDE_PATH e LD_LIBRARY_PATH são locais para procurar cabeçalhos e bibliotecas, respectivamente. As opções gcc -l e -L são úteis, é comum declarar algo como

BIBLIOTECAS = -lcs

LIBDIR = -L / usr / local / lib

Em seguida, use estas variáveis de criação nos comandos executados por cada regra. Se você instalou estas bibliotecas usando o apt-get, pode haver dados de configuração do pacote disponíveis, veja o comando pkg-config

    
por rhubarbdog 26.10.2014 / 05:27
0

Eu não acho que isso está resolvendo o seu problema, mas respondendo a pergunta como dito:

Existem algumas maneiras de definir opções padrão para make :

  • Usando um alias de shell, como

    alias make='make --foo=bar'
    

    em ~/.bashrc ou similar.

  • Definindo a variável de ambiente MAKEFLAGS para conter as opções padrão.

  • Usando a variável de ambiente MAKEFLAGS para adicionar a opção padrão -e ( --environment-overrides ) e defina outras variáveis relevantes para os arquivos de criação em ~/.bashrc , a serem capturadas por make , priorizadas sobre definições no Makefile

Com cada um desses métodos, todos os usos de make são afetados, o que não é exatamente o que você deseja aqui.

Uma solução melhor parece ser não alterar as opções padrão de make ,
mas para usar um alias separado para executar de forma interativa. O alias pode definir opções para invocações recursivas de make .

alias cs50make='make --foo=bar'

ou

alias cs50make='MAKEFLAGS="..." make'

ou até mesmo

alias cs50make='MAKEFLAGS="-e ..." VAR1="..." VAR2="..." make'


Em relação a fazer com que make pare em erros: normalmente deve fazer isso por padrão, mas se estiver em algum lugar definido para não parar, você pode usar a opção -S ( --no-keep-going , --stop ) para anular. / p>     

por Volker Siegel 26.10.2014 / 08:56
0

Você deve fazer a regra ler algo assim,

ola: ola.c

gcc -ohello hello.c -g -lcs50 -lm

Agora é só digitar o comando

faça oi

    
por rhubarbdog 26.10.2014 / 12:33