[CMake] Building the same library with different defines
Patrick J. Franz -- ML
patrick at xia.com
Wed Oct 4 15:15:25 EDT 2006
I'm a fairly new CMake user, so I apologize in advance if this question
is answered trivially elsewhere. I searched through the docs and Google
already to no avail.
In a project I am working on, I need to build our Win32 libraries in
both cdecl and stdcall variants. The calling conventions can be
controlled through a -D variable, but I am having a hard time getting
CMake to modify definitions between builds of the same set of source files.
I have tried 2 techniques:
1) Use SET_SOURCE_FILES_PROPERTIES() to change the -D settings between
builds.
# cdecl (default) build
ADD_LIBRARY(my_lib SHARED src/lib.c)
SET_SOURCE_FILES_PROPERTIES(src/lib.c COMPILE_FLAGS -DTURN_ON_STDCALL)
ADD_LIBRARY(my_lib_stdcall SHARED src/lib.c)
On my machine, SET_SOURCE_FILE_PROPERTIES() has the effect of setting
TURN_ON_STDCALL for every build that uses src/lib.c.
2) Use ADD_DEFINITIONS() and REMOVE_DEFINITIONS().
REMOVE_DEFINITIONS(-DTURN_ON_STDCALL)
ADD_LIBRARY(my_lib SHARED src/lib.c)
ADD_DEFINITIONS(-DTURN_ON_STDCALL)
ADD_LIBRARY(my_lib_stdcall SHARED src/lib.c)
The effect of this was no different then when I used
SET_SOURCE_FILES_PROPERTIES().
If I had to guess, I would suppose that lib.obj is really only being
built once and simply linked twice to create the two libraries I want.
What I really need is to force lib.c to be built (and linked) twice with
the different -D options. Any suggestions on how I might do this? (It
could also be that I'm doing this the hard way and there is a more
idiomatic way to create these two libraries that doesn't involve CMake.
I'll take those suggestions too :)
Thanks in advance,
Patrick
More information about the CMake
mailing list