Uma maneira mais fácil de fazer isso do que o script de shell, assim que você pegar o jeito, é usar make , que você provavelmente já viu referência antes.
Um makefile morto simples pode ter esta aparência:
myproject: myproject.cpp
g++ myproject.cpp -o myproject
Por padrão, make
escolhe o primeiro alvo se um não for especificado, já que há apenas um, neste caso, ele fará o que você vê lá. O alvo é o rótulo antes dos dois pontos (myproject); após os dois pontos são alvos de pré-requisito. Se esses destinos não estiverem listados, eles serão considerados arquivos. Nesse caso, se myproject.cpp não tiver sido alterado desde que a saída do destino myproject foi feita (o binário "myproject"), make não fará nada. Se tiver, recompila.
O valor de uso do make fica mais claro à medida que as coisas ficam mais complicadas:
flags = -Wall -g -O2
myproject: myproject.h myproject.cpp somepart.o
g++ $(flags) somepart.o myproject.cpp -o myproject
somepart.o: somepart.h somepart.cpp
g++ $(flags) -c somepart.cpp -o somepart.o
Os arquivos .h são pré-requisitos, pois, se você alterar um, você desejará que as peças que o requerem sejam recompiladas. Então agora você pode fazer make somepart.o
apenas para compilar o objeto, ou você pode fazer make
, que usará o primeiro alvo (myproject) que requer um "somepart.o" atualizado, então se isso não estiver disponível , vai fazer tudo isso também.
Fazer isso com um script bash não é tão fácil, e é provavelmente por isso que make
surgiu. Infelizmente, "pegar o jeito" pode demorar um pouco. l0b0 já ligado a isso:
Tenha em atenção primeiro que make é sensível a espaços em branco, especialmente no que diz respeito ao uso de separadores reais e não de espaços.