[CMake] CMake removes /DEF: option in CMAKE_SHARED_LINKER_FLAGS

Craig Scott craig.scott at crascit.com
Sat Oct 5 04:33:25 EDT 2019


On Sat, Oct 5, 2019 at 12:59 AM Alexander <alexander.samoylov at gmail.com>
wrote:

> Dear Cristian,
>
> It would better for me not modifying CMakeFiles.txt, because as I wrote it
> is 3rd party stuff (we just download it and build, but some different way).
> My concern is why the command line option -DCMAKE_SHARED_LINKER_FLAGS
> deliberately ignores /DEF: option. It this behavior expected? What is the
> logic behind this behavior? Why not simply allow /DEF in
> CMAKE_SHARED_LINKER_FLAGS and not cut it?
>


You don't have to modify the third party CMakeLists.txt file to achieve
what Cristian suggested. You can call target_sources() on the third party
target from your own CMakeLists.txt file to add .def files to their target.
You don't have to be in the same directory scope as the target to use
target_sources() on it.

I'm not familiar with why CMake is stripping out the /DEF: option in your
case, but I suspect it would be related to the way CMake expects to add
such options based on .def files given as sources.



> On Fri, 4 Oct 2019 at 16:54, Cristian Adam <cristian.adam at gmail.com>
> wrote:
>
>> Hi,
>>
>> You should simply add the my_defs.def file as a source files to
>> add_library/add_executable.
>> CMake will automagically pass /DEF: to the linker with my_defs.def
>>
>> Cheers,
>> Cristian.
>>
>> On Fri, Oct 4, 2019 at 4:45 PM Alexander <alexander.samoylov at gmail.com>
>> wrote:
>>
>>> Hello,
>>>
>>> I would like to add an extra .defs file for linking of a DLL on Windows.
>>> I want to use the CMake command line option
>>> -DCMAKE_SHARED_LINKER_FLAGS="/DEF:my_defs.defs". I expect that besides the
>>> automatically generated
>>> <project_path>/bin/<project>.dir/Release/exports.def i see additionally
>>> /DEF:my_defs.defs in the resulting linking command, but it does not happen.
>>>
>>> What is especially irritating that CMake deliberately removes namely
>>> /DEF: from CMAKE_SHARED_LINKER_FLAGS. Any other word combinations (if I
>>> write  /DEF111:my_defs.def for example) are accepted and I see them the
>>> linking command.
>>>
>>> I tried to reach the same goal using a CMakeLists.txt like this:
>>>
>>> set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /DEF:my_defs.def")
>>>
>>> but it did not help - the same way CMake removes my /DEF: option.
>>>
>>> Could you please open a ticket to fix this behavior to not cut /DEF:
>>> option from CMAKE_***_LINKER_FLAGS?
>>>
>>> On my opinion CMake should not interpret or modify the content of
>>> CMAKE_SHARED_LINKER_FLAGS value, but should put it entirely as the user
>>> specified it. If you have another opinion, please provide any other
>>> possibility to pass an arbitrary arguments to the linking command "as is"
>>> so that they are not modified.
>>>
>>> Any workaround is highly appreciated (better command-line, because we
>>> build 3rd party software and it would not really fine to change
>>> CMakeLists.txt)
>>>
>>> --
>>> Best Regards,
>>> Alexander Samoilov
>>> Build & Integration Engineer
>>> Compart AG, 71034 Böblingen Germany
>>>
>>

-- 
Craig Scott
Melbourne, Australia
https://crascit.com

Get the hand-book for every CMake user: Professional CMake: A Practical
Guide <https://crascit.com/professional-cmake/>
Consulting services (CMake, C++, build/release processes):
https://crascit.com/services
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20191005/782ed253/attachment-0001.html>


More information about the CMake mailing list