Duvida Tarefa 4

Duvida Tarefa 4

por Renato Avila -
Número de respostas: 6

Posso considerar que o MakeFile é padronizado? Que eu tenho o <target> depois vem um ":" sem espaço e depois as dependencias separadas por um, e apenas um espaço? Ou tenho que considerar que pode ter quantos espaços o usuario quiser e depois do <target> pode ou nao ter espaços antes do ":"?

Em resposta à Renato Avila

Re: Duvida Tarefa 4

por César Machado -

Pode sim. Vou fazer os testes sempre com MakeFile como descrito (sem espaços entre target e ':', apenas um espaço entre dependencias, pelo menos um comando por regra, uma linha em branco entre regras), basta que seu programa funcione corretamente para um arquivo assim.

Claro que se o seu programa aceita mais coisas, tudo bem (só lembre que linhas com comandos devem começar com tab! :p). Se quiserem melhorar a leitura, verifiquem que tipos de coisa o make aceita. (lembrando, não precisam se preocupar com isso, o foco da tarefa é a parte de grafos de dependência e basta que o programa leia um MakeFile como descrito)

Vou testar com targets assim: (separadas por uma linha em branco)

<target>: <dep1> <dep2> ... <depN>
<TAB><comando (pode ter espaços aqui dentro)>

Podem assumir que cada palavra vai ter até 50 caracteres, cada linha até 1000 e vão existir no máximo 100 arquivos/targets. (mas deixem esses números em algum define para que seja fácil mudar)

Estou mandando em anexo um programa que lê um arquivo desses. Vocês podem usar ele como base se quiserem.

Em resposta à César Machado

Re: Duvida Tarefa 4

por Paulo Cheadi Haddad Filho -

Estou mandando em anexo um programa que lê um arquivo desses. Vocês podem usar ele como base se quiserem.

O quanto "como base" a gente pode usar esse código? Hehehe!

Em resposta à César Machado

Re: Duvida Tarefa 4

por Wilson Kazuo Mizutani -

Outra dúvida quanto à especificação do MakeFile.

Que caracteres são aceitos como pertencentes ao nome de um arquivo/target?

Em resposta à Wilson Kazuo Mizutani

Re: Duvida Tarefa 4

por César Machado -

bom, acho que letras, números e os caracteres . - _ bastam, mas pode aceitar qualquer caractere que não seja espaço (' ', \t, \n)

A não ser que você tenha um motivo pra fazer diferente eu recomendo usar (s)scanf("%s) ou cin >> variavel

Em resposta à César Machado

Re: Duvida Tarefa 4

por César Machado -

Ops, uma pequena correção:

Percebi hoje que a função de leitura que eu mandei pode não funcionar direito para arquivos feitos no Windows... Isso acontece porque uma nova linha no windows é indicada por "\r\n" em vez de simplesmente "\n" como no Linux. Assim, linhas em branco terão tamanho 2 e não 3.

Se alguém tiver problemas com isso (o programa deveria ignorar quaisquer linhas em branco entre regras), basta trocar o if da linha 23 para "if (strlen(line) <= 2)" (o programa continua válido pois linhas válidas tem no mínimo 3 caracteres, mesmo no linux - um para o nome da target, um ':' e um '\n') ou verificar se existe um caractere na linha que não é espaço.