[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