[CMake] modify cmake build arguments

fdk17 fdk17 at ftml.net
Fri Aug 30 05:28:10 EDT 2019



On Fri, Aug 30, 2019, at 1:47 AM, Eric Doenges wrote:
> On 29.08.2019 22:38, fdk17 wrote:
>> On Thu, Aug 29, 2019, at 2:52 PM, Kyle Edwards via CMake wrote:
>>> On Thu, 2019-08-29 at 18:27 +0100, hex wrote:
>>> > hello community,
>>> > 
>>> > CMake builds a C project with gcc -o target_name. I have a compiler
>>> > very similar to GCC and I am trying configure CMake C language for
>>> > it.
>>> > 
>>> > The compiler does not support the -o argument when linking objects. I
>>> > wonder if there is a way to remove or modify this argument, maybe
>>> > through one of the properties on targets?
>>> > 
>>> > thank you
>>> 
>>> Your best bet would be to modify the CMake source code to support your
>>> compiler. (Upstreaming your changes would be welcome.)
>>> 
>>> As a matter of interest, what does it use instead of -o?
>>> 
>>> Kyle
>> 
>> If you are using the Makefile generator then try:
>> https://cmake.org/cmake/help/latest/variable/CMAKE_USER_MAKE_RULES_OVERRIDE.html
>> You may then be able to provide the rules needed, refer to "Modules/CMakeCInformation.cmake".
>> The way I understand it is that the rule templates are used by the Makefile generator.
>> 
> The way I understand the documentation, CMAKE_USER_MAKE_RULES_OVERRIDE applies for all generators, not just the Makefile one. What you are apparently supposed to do is create a file that sets all the "rule variables" as required (in this case, CMAKE_C_COMPILE_OBJECT), and then include that file via CMAKE_USER_MAKE_RULES_OVERRIDE. I'm not sure if these 'rule variables' are documented anywhere - but you can look into "<path where CMake is installed>/share/cmake-<version>/Modules/Compiler" for inspiration. Another good starting point would be "<...>/share/cmake-<version>/Modules/CMakeCInformation.cmake".

> 

> With kind regards,
>  Eric
> 

> *Dr. Eric Dönges *
>  Senior Software Engineer

> 


I could have been clearer about the use of CMAKE_USER_MAKE_RULES_OVERRIDE. It wasn't my intention to suggest that only the Makefile generator makes use of this variable.

In a quick check I only saw the CMAKE_C_COMPILE_OBJECT rule being used by the Makefile (and maybe the Ninja) generator and I know that it isn't used by the GHS Multi generator. Which is why I mentioned the Makefile generator specifically in regards to changing a "-o" to something else.

If you look at Modules/CMakeCInformation.cmake it will only define a rule if it hasn't already been previously set either by the definitions in the compiler / platform files that get included first and then by the override file.

You won't need to define all the rules in the override file just the ones you care to change. Also not all of the rules that get defined applies to all of generators (such as CMAKE_C_COMPILE_OBJECT as already mentioned).

A good example to follow is Modules/Compiler/TI-C.cmake to change a "-o" to something else. From TI-C.cmake:
set(CMAKE_C_COMPILE_OBJECT "<CMAKE_C_COMPILER> --compile_only --c_file=<SOURCE> <DEFINES> <INCLUDES> <FLAGS> --output_file=<OBJECT>")

Then as suggested the override file could be the basis of a new compiler file that gets submitted upstream.

--
F
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20190830/7394053a/attachment.html>


More information about the CMake mailing list