[CMake] help with learning add_library
Eric Noulard
eric.noulard at gmail.com
Sat Nov 6 19:08:29 EDT 2010
2010/11/7 luxInteg <lux-integ at btconnect.com>:
> I tried the following:-
>
> ADD_LIBRARY(LearnCMAKE-shared SHARED file1.c file2.c )
> ADD_LIBRARY(LearnCMAKE-static STATIC file1.c file2.c )
> SET(var "")
> FOREACH(var DINT DLONG)
> SET_SOURCE_FILES_PROPERTIES( file1.c file2.c
> PROPERTIES COMPILE_DEFINITIONS ${var})
> ENDFOREACH(var)
> SET_TARGET_PROPERTIES(LearnCMAKE-shared LearnCMAKE-static
> PROPERTIES OUTPUT_NAME LearnCMAKE)
>
> but my compile logs only show lines with "-DDLONG -O3 "
> and one with "-DDINT -O3"
>
> and the generated libs are about half the size they should be.
>
> advice would be appreciated
I think you cannot use **the same** file properties on a source file
and expect CMake will compile the file twice for the same target.
If you want to compile the same source file twice with different compile flags
**FOR THE SAME TARGET** you have to copy this file
configure_file(file1.c file1-long.c @COPYONLY)
SET_SOURCE_FILES_PROPERTIES(file1.c PROPERTIES COMPILE_DEFINITIONS "-DINT")
SET_SOURCE_FILES_PROPERTIES(file1-long.c PROPERTIES
COMPILE_DEFINITIONS "-DLONG")
** same for file 2 **
ADD_LIBRARY(LearnCMAKE-static STATIC file1.c file1-long.c file2.c file2-long.c)
ADD_LIBRARY(LearnCMAKE-shared SHARED file1.c file1-long.c file2.c file2-long.c)
note however that you CAN compile the **same file** twice with differents flags
if it is for **DIFFERENT** targets. You can use "set_target_properties".
i.e.
ADD_LIBRARY(LearnCMAKE-int file1.c file2.c)
ADD_LIBRARY(LearnCMAKE-long file1.c file2.c)
set_target_properties(LearnCMAKE-int PROPERTIES COMPILE_FLAGS "-DINT")
set_target_properties(LearnCMAKE-long PROPERTIES COMPILE_FLAGS "-DLONG")
i.e. AFAIK compiling the **same** source file twice for the **same** target
is unsupported.
--
Erk
Membre de l'April - « promouvoir et défendre le logiciel libre » -
http://www.april.org
More information about the CMake
mailing list