[CMake] How to get list of generated object-files of OBJECT-library?

Nils Gladitz nilsgladitz at gmail.com
Mon Jul 17 10:47:00 EDT 2017


On 7/17/2017 3:52 PM, Deniz Bahadir wrote:
>
> This works just fine. However, now I want to add an additional 
> build-step after creation of the object-files and before linking the 
> shared library. (In particular, I want to compress the debug-symbols 
> in the object-files. But that should be irrelevant for my question.)
>
> My first attempt was to add the following between the two add_library 
> commands:
> ```
> add_custom_command( TARGET ${PROJECT_NAME}_OBJECTS POST_BUILD
>     COMMAND objcopy --compress-debug-sections 
> $<TARGET_OBJECTS:${PROJECT_NAME}_OBJECT>
> )
> ```
> But that results in the following error:
> ```
> (add_custom_command):
>   Target "MyProject_OBJECTS" is an OBJECT library that may not
>   have PRE_BUILD, PRE_LINK, or POST_BUILD commands.
> ```
>
> So I tried instead to add the following between the two add_library 
> commands:
> ```
> add_custom_command( TARGET ${PROJECT_NAME} PRE_LINK
>     COMMAND objcopy --compress-debug-sections 
> $<TARGET_OBJECTS:${PROJECT_NAME}_OBJECT>
> )
> ```
> This then fails when evaluating the generator-expression:
> ```
> (add_custom_command):
>   Error evaluating generator expression:
>
>     $<TARGET_OBJECTS:MyProject_OBJECTS>
>
>   The evaluation of the TARGET_OBJECTS generator expression is only 
> suitable
>   for consumption by CMake.  It is not suitable for writing out 
> elsewhere.
> ```
>
> So I am currently out of ideas (which do not make the CMakeLists.txt 
> file completely unmaintainable). Therefore my question is:
>
> How can I retrieve the list of generated object-files so that I can 
> pass it to another program that should be run as additional build-step 
> before linking?
>
> IMHO, the most comfortable (and syntactically cleanest) way would be 
> my first attempt. But that is probably more a feature-request than a 
> simple question.

FWIW this was implemented in the upcoming 3.9:
https://cmake.org/cmake/help/latest/module/CPackIFW.html#command:cpack_ifw_configure_component

Nils


More information about the CMake mailing list