Re: [CMake] get complete list of compile definitions

2017-04-05 Thread Volker Enderlein

Am 04/04/2017 um 11:17 schrieb Magnus Therning:

Robert Schwarzelt  writes:


Hi all,
I need to implement a code export function, that will only export code used
in a specific project configuration.
For this purpose I want to use unifdef (http://dotat.at/prog/unifdef/),
which is capable of removing unused #ifdef blocks.

The project uses static libraries like in following example:

add_library(
 foo STATIC
 foo.c
)

add_library(
 bar STATIC
 bar.c
)

target_compile_definitions(bar INTERFACE HAVE_BAR)
target_link_libraries(foo LINK_PUBLIC bar)


Now foo.c will be compiled with -DHAVE_BAR at build time.
To create a custom target using unifdef i need this information at cmake
configure time. I expected to find this in the property COMPILE_DEFINITIONS
of either the source file foo.c or target foo, but both are empty.

Does anyone know, how to get a list of definitions (that will be used at
build time) for targets or files?

Not to discourage you, but *every time* I've asked a question along the
lines of "how can I get a list of foo for a source file / target at
cmake configuration time" the answer has been "oh, that's not easy", or
even "oh, that's not possible". In every case I've resorted to trying to
find a way to push what I want to do until build time.

If you *can* find a way to do it post-configuration time I believe you will have
access to everything you need if you set "CMAKE_EXPORT_COMPILE_COMMANDS"
and then look at the resulting `compile_commands.json`.

/M

--
Magnus Therning  OpenPGP: 0x927912051716CE39
email: mag...@therning.org   jabber: mag...@therning.org
twitter: magthe   http://therning.org/magnus

Finagle's Second Law:
Always keep a record of data — it indicates you've been working.




I successfully used the following commands to get the 
INTERFACE_COMPILE_DEFINITIONS and the COMPILE_DEFINITIONS of a target
(yes, both of them may exist). And because the OP has specified 
INTERFACE_COMPILE_DEFINITIONS he should evaluate that property of the 
target.


get_target_property(_if_compile_defs YourTargetNameHere 
INTERFACE_COMPILE_DEFINITIONS)


get_target_property(_compile_defs YourTargetNameHere COMPILE_DEFINITIONS)

Cheers Volker


--

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake


Re: [CMake] get complete list of compile definitions

2017-04-04 Thread Magnus Therning

Robert Schwarzelt  writes:

> Hi all,
> I need to implement a code export function, that will only export code used
> in a specific project configuration.
> For this purpose I want to use unifdef (http://dotat.at/prog/unifdef/),
> which is capable of removing unused #ifdef blocks.
>
> The project uses static libraries like in following example:
>
> add_library(
> foo STATIC
> foo.c
> )
>
> add_library(
> bar STATIC
> bar.c
> )
>
> target_compile_definitions(bar INTERFACE HAVE_BAR)
> target_link_libraries(foo LINK_PUBLIC bar)
>
>
> Now foo.c will be compiled with -DHAVE_BAR at build time.
> To create a custom target using unifdef i need this information at cmake
> configure time. I expected to find this in the property COMPILE_DEFINITIONS
> of either the source file foo.c or target foo, but both are empty.
>
> Does anyone know, how to get a list of definitions (that will be used at
> build time) for targets or files?

Not to discourage you, but *every time* I've asked a question along the
lines of "how can I get a list of foo for a source file / target at
cmake configuration time" the answer has been "oh, that's not easy", or
even "oh, that's not possible". In every case I've resorted to trying to
find a way to push what I want to do until build time.

If you *can* find a way to do it post-configuration time I believe you will have
access to everything you need if you set "CMAKE_EXPORT_COMPILE_COMMANDS"
and then look at the resulting `compile_commands.json`.

/M

--
Magnus Therning  OpenPGP: 0x927912051716CE39
email: mag...@therning.org   jabber: mag...@therning.org
twitter: magthe   http://therning.org/magnus

Finagle's Second Law:
Always keep a record of data — it indicates you've been working.


signature.asc
Description: PGP signature
-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake

[CMake] get complete list of compile definitions

2017-03-29 Thread Robert Schwarzelt
Just in case anyone is interested - I found a hint in this old thread:
https://cmake.org/pipermail/cmake/2014-February/056993.html

Trick is to use a generator expression like this:
"$"

Regards,
Robert Schwarzelt


-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake


[CMake] get complete list of compile definitions

2017-03-29 Thread Robert Schwarzelt
Hi all,
I need to implement a code export function, that will only export code used
in a specific project configuration.
For this purpose I want to use unifdef (http://dotat.at/prog/unifdef/),
which is capable of removing unused #ifdef blocks.

The project uses static libraries like in following example:

add_library(
foo STATIC
foo.c
)

add_library(
bar STATIC
bar.c
)

target_compile_definitions(bar INTERFACE HAVE_BAR)
target_link_libraries(foo LINK_PUBLIC bar)


Now foo.c will be compiled with -DHAVE_BAR at build time.
To create a custom target using unifdef i need this information at cmake
configure time. I expected to find this in the property COMPILE_DEFINITIONS
of either the source file foo.c or target foo, but both are empty.

Does anyone know, how to get a list of definitions (that will be used at
build time) for targets or files?

Regards,
Robert Schwarzelt


-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake