[CMake] Rules for files with non-standard extensions

Steven Wilson steven.wesley.wilson at gmail.com
Tue Mar 3 15:06:56 EST 2009


As a new member of the list, I just wanted to say thanks for providing this
forum as a place to get answers about cmake!
First, the problem:   I have a software system composed of a number of
source files in C.   These files have an alternate file extension .bc.   In
order to compile these files, the build system first needs to pass them
through two preprocessors; 1. The C preprocessor and 2. a homegrown
preprocessor that handles a private C language extension and converts
occurrences of that language extension to standard C.   Finally the
preprocessed source is handed to the C compiler.    My initial port of this
build system used the following kind of construct:

macro(process_bc_files INPUT_FILE)

add_custom_command(OUTPUT ${INPUT_FILE}.c

COMMAND preprocessor1 ${INPUT_FILE} > tmpfile
COMMAND preprocessor2 tmpfile > ${INPUT_FILE}.c

)



endmacro(process_bc_files)

process_bc_file(/path/to/main.bc)

add_executable(Foo main.bc.c)

Now this construct works and the build functions correctly, but I have
noticed a problem that I need to have corrected.   When I use the Xcode
generator on my project I get a nice Xcode project except that the source
files listed for executable Foo are the processed files (*.bc.c) not the
original .bc files.  This state of course makes sense because the .bc.c
files are used in the add_executable line, but it makes the Xcode project
file incorrect because developers will not edit the .bc.c files but the
originals.

The question:  Does a way to do something like the following exist?

add_executable(Foo main.bc)

Ie can I create some rules that act like the add_custom_command so that the
add_executable refers to the processed output while the Xcode project refers
to the source file?

Thanks for any help,

Steve
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20090303/4edd5a8f/attachment.htm>


More information about the CMake mailing list