Estou escrevendo um programa em C e quero compilar opcionalmente uma unidade de tradução com base se o usuário deseja ou não. Basicamente eu tenho dois arquivos, um main.c que deve sempre ser compilado. Além disso, eu tenho um arquivo vamos, chamá-lo de optional.c. Algumas funções em optional.c são muito mais rápidas do que em main.c, mas também são mais propensas a erros.
No meu main.c eu posso escrever código como
#ifdef USE_OPTIONAL
some function call from optional.c
#else
some function call from main.c
#endif
No meu makefile eu também quero compilar optional.c somente se ele deve ser usado, digamos
gcc -c optional.c
gcc -c -DUSE_OPTIONAL main.c
gcc main.o optional.o
e se não, simplesmente
gcc -c main.c
gcc main.o
Funciona para ter duas regras diferentes, uma chamada "all:" e outra chamada "opcional:", mas eu preferiria digitar apenas "make" em vez de "make optional". Qual é a maneira mais simples de implementar isso? Devo recorrer a um script de configuração e um Makefile.in ou é melhor ter apenas uma segunda regra? É possível implementar, por exemplo, "make USE_OPTIONAL=1" e depois fazer ler a entrada da variável USE_OPTIONAL para descobrir o que fazer?
Você pode usar abordagens semelhantes para suas diretivas de pré-processador C em Makefiles, pelo menos se estiver usando GNU Make:
Com isso em vigor, qualquer valor fornecido
USE_OPTIONAL
namake
invocação resultará na inclusão de recursos opcionais.Se você quiser um teste mais específico, você pode usar
em vez da
ifdef
linha. Então você precisaria especificamentemake USE_OPTIONAL=1
.