[CMake] Adding an individual define to each source file of a library

George PF george.p.f at mail.com
Thu Aug 23 12:31:38 EDT 2018


Thank you for the precise pointers, I added to the same CMakeLists.txt:
 
    get_property(mysrcs TARGET mylib PROPERTY SOURCES)

    foreach(x IN LISTS mysrcs)
        message("at ${x}")
        set_property(SOURCE x APPEND PROPERTY COMPILE_DEFINITIONS "TEST1;TEST2;")
    #    set_source_files_properties(x PROPERTIES COMPILE_DEFINITIONS "TEST1;TEST2;") # also not working
    endforeach(x)

However, whatever I write into 'set_property()' - no APPEND, single entry, not quoted - does not end up 
on the compiler command line. Is there a type mismatch which is silently ignored?

As to __FILE__ or similar, the define is used as a variable, i.e. the .c suffix would have to be removed 
via the c processor. The current directory is also used. I think replacing .c and appending the name of 
the current directory will be easier in cmake.


> Le jeu. 23 août 2018 à 13:02, George PF <george.p.f at mail.com> a écrit :
> 
> > Hello,
> >
> > following "modern cmake" conventions I want to create a library where
> > every single file is compiled with an individual define (-D_fileX_,
> > required for a macro which integrates code into every translation unit).
> >
> > So following this
> >
> >     add_library(mylib SHARED file1.c file2.c)
> >     target_link_libraries(mylib PUBLIC otherlib)
> >
> > I'd like to iterate over all "mylib" source file targets and modify them
> > so that the compiler is called like this:
> >
> >     cc -c -o file1.o file1.cc -D_file1_define_
> >     cc -c -o file1.o file2.cc -D_file2_define_
> >     etc.
> >
> > Is this possible?
> >
> 
> You can retrieve the sources associated with a target using SOURCES
> properties.
> https://cmake.org/cmake/help/latest/prop_tgt/SOURCES.html
> 
> then
> https://cmake.org/cmake/help/latest/command/foreach.html
> with
> https://cmake.org/cmake/help/latest/command/set_property.html
> or
> https://cmake.org/cmake/help/latest/command/set_source_files_properties.html
> 
> for setting property:
> https://cmake.org/cmake/help/latest/prop_sf/COMPILE_DEFINITIONS.html
> 
> on each source file.
> 
> not sure why you want to do that you know that compiler already defined
> many "standard" macro for you, like __FILE__
> https://gcc.gnu.org/onlinedocs/cpp/Standard-Predefined-Macros.html#Standard-Predefined-Macros
> ?
> 
> -- 
> Eric


More information about the CMake mailing list