[CMake] Custom compile command?

Bill Hoffman bill.hoffman at kitware.com
Thu Jun 4 16:57:22 EDT 2009


Bob Tanner wrote:
> I'm moving an open source project (netrek) to cmake. Things are going 
> great except for 1 fairly convoluted Makefile snippet listed below:
> 

Cool!

I used to love Xtrek!  I wasted many hours playing that at GE in the 
early 90's.

> 
> commands_mars.o: $(PMAKE) ${srcdir}/../ntserv/commands.c
>        $(CC) $(CFLAGS) $(DEP) -DDOG -c ${srcdir}/../ntserv/commands.c -o 
> commands_mars.o
> 
> commands_puck.o: $(PMAKE) ${srcdir}/../ntserv/commands.c
>        $(CC) $(CFLAGS) $(DEP) -DPUCK -c ${srcdir}/../ntserv/commands.c 
> -o commands_puck.o
> 
> commands.o: $(PMAKE) ${srcdir}/../ntserv/commands.c
>        $(CC) $(CFLAGS) $(DEP) -c ${srcdir}/../ntserv/commands.c -o 
> commands.o
> 
> commands_basep.o: $(PMAKE) ${srcdir}/../ntserv/commands.c
>        $(CC) $(CFLAGS) $(DEP) -DBASEP -c ${srcdir}/../ntserv/commands.c 
> -o commands_basep.o
> 
You could use configure_file to do this.

Something like this:

set(COMMANDS_TYPE DOG)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/commands.c.in
                ${CMAKE_CURRENT_BINARY_DIR}/commands_mars.c)
set(COMMANDS_TYPE PUCK)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/commands.c.in
                ${CMAKE_CURRENT_BINARY_DIR}/commands_puck.c)

Where commands.c.in looks like this:
#define ${COMMANDS_TYPE}
#include "${CMAKE_CURRENT_SOURCE_DIR}/commands.c"

add_library(mylib
            ${CMAKE_CURRENT_BINARY_DIR}/commands_mars.c
            ${CMAKE_CURRENT_BINARY_DIR}/commands_puck.c)


-Bill


More information about the CMake mailing list