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

Nils Gladitz nilsgladitz at gmail.com
Mon Jul 17 11:15:29 EDT 2017


On 17.07.2017 17:13, Deniz Bahadir wrote:
> Am 17.07.2017 um 16:47 schrieb Nils Gladitz:
>> 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 
>>
>
> Thank you for your answer, Nils, but I do not really see how this 
> relates.
> This command seems to address CPack, while I am still struggling with 
> CMake building files (that later might be installed by CPack). 

So sorry about that.
Must have gotten the wrong link in my clipboard.

The correct link is:
     https://cmake.org/cmake/help/latest/release/3.9.html#other

Nils


More information about the CMake mailing list