[CMake] help with learning add_library
luxInteg
lux-integ at btconnect.com
Mon Nov 8 17:21:54 EST 2010
On Monday 08 November 2010 18:10:01 Eric Noulard wrote:
> 2010/11/8 luxInteg <lux-integ at btconnect.com>:
> > On Saturday 06 November 2010 23:08:29 Eric Noulard wrote:
> >> 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
> >>
> >>
> >> 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)
> >
> > BUT
> > suppose I decide to set file1.c and file2.c as some variable "FILES"
> > and I want to use a preprocessor say DLONG
> > could I do the following?
> >
> > set(FILES file1.c file2.c )
> > SET_SOURCE_FILES_PROPERTIES(${FILES} PROPERTIES COMPILE_DEFINITIONS
> > "-DLONG")
>
> Off course you can
thanks, it worked a treat.
> BUT you cannot set the SAME PROPERTY twice for the same file.
> So if you have to do so (compile fileX.c with BOTH -DINT and DLONG) then
> you have to do some sort of loop with CMake or
> populate 2 CMake variable
>
> SRC_FILES_LONG
> and
> SRC_FILES_INT
> with the list of appropriate file.
>
> If you manipulate list have a look at the CMake builtin "LIST" command.
I had a look at lists on this page
http://www.cmake.org/Wiki/CMakeMacroListOperations
I have also came across this problem:- I have some files say
file1.c
file2.c
file3.c
file4.c
to be compiled into a library
before archiving
file1.c is compiled into file1.o
but file2.c and file3.c are compiled int file2file3.o then
file4.c is compiled into file4.o
I had a cursory look at list an came up with this embryonic/rudimentary
'half-attempt'
But I am stuck on the bracketed line
---------------
set(RUN oddone.o file2.c file3.c )
LIST CONTAINS(file2.c file3.c ${RUN})
IF (contains )
(--compile file2.c and file3.c into oddone.o )
endif (contains)
-------------
advice on whether lists of othrwise is appropriate would be appreciated.
More information about the CMake
mailing list