[cmake-developers] CMAKE :: mingw make files with response file for includes

Jayakumar, Lenindarbi Lenindarbi.Jayakumar at magna.com
Wed Jan 17 03:52:54 EST 2018


Hello,

I have encountered a problem with response file usage for includes.
My project is using tasking compiler.

Issue:
Response file link flag "CMAKE_C_RESPONSE_FILE_LINK_FLAG" is not customizable for include paths.
Cmake generated the *.rsp file always using @ but this is not accepted by tasking compiler. Tasking compiler expects -f instead of @.

...
C_INCLUDES = @CMakeFiles/dummyTarget/includes_C.rsp

This issue is only with includes response file. For objects, CMAKE_C_RESPONSE_FILE_LINK_FLAG works.

Project setup:
set(CMAKE_C_RESPONSE_FILE_LINK_FLAG "-f ")
set(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
set(CMAKE_C_USE_RESPONSE_FILE_FOR_INCLUDES 1)

Possible cause:

The @ symbol is hardcoded in "cmMakefileTargetGenerator::AddIncludeFlags" function in file https://gitlab.kitware.com/cmake/cmake/blob/master/Source/cmMakefileTargetGenerator.cxx.

  if (useResponseFile) {
    std::string name = "includes_";
    name += lang;
    name += ".rsp";
    std::string arg = "@" +
      this->CreateResponseFile(name.c_str(), includeFlags,
                               this->FlagFileDepends[lang]);
    this->LocalGenerator->AppendFlags(flags, arg);
  }

However, the implementation should be like in "cmMakefileTargetGenerator::CreateObjectLists" function.

    // Lookup the response file reference flag.
    std::string responseFlagVar = "CMAKE_";
    responseFlagVar +=
      this->GeneratorTarget->GetLinkerLanguage(this->ConfigName);
    responseFlagVar += "_RESPONSE_FILE_LINK_FLAG";
    const char* responseFlag = this->Makefile->GetDefinition(responseFlagVar);
    if (!responseFlag) {
      responseFlag = "@";
    }

Regards,

Lenindarbi Jayakumar
Software Engineer

Magna Electronics Europe GmbH & Co. OHG
Kurfürst-Eppstein-Ring 9
63877 Sailauf
OFFICE +49 6093 9942 6462
FAX +49 6093 9942 6001
MOBILE
Lenindarbi.Jayakumar at magna.com
http://www.magna.com<http://www.magnaelectronics.com/>

Magna Electronics Europe GmbH & Co. OHG
Geschäftsführende Gesellschaft: Magna Electronics Europe Verwaltungs GmbH
Geschäftsführer: Rainer Bruns, Cornelius Wolber
Sitz der geschäftsführenden Gesellschaft: Sailauf, Deutschland
Registergericht: Aschaffenburg / HRB 8778
Sitz der Gesellschaft (OHG): 63877 Sailauf, Deutschland
Registergericht: Aschaffenburg / HRA 4616
Diese Nachricht ist ausschließlich für den oben bezeichneten Adressaten bestimmt und enthält möglicherweise vertrauliche Informationen. Sollten Sie nicht der oben bezeichnete Adressat sein oder diese Nachricht irrtümlich erhalten haben, ersuchen wir Sie, diese Nachricht nicht weiterzugeben, zu kopieren oder im Vertrauen darauf zu handeln, sondern uns unter Lenindarbi.Jayakumar at magna.com zu verständigen und diese Nachricht samt allfälliger Anlagen sofort zu löschen. Vielen Dank.
This message is intended only for use by the named addressee and may contain privileged and/or confidential information. If you are not the named addressee, you should not disseminate, copy, or take any action in reliance on it. If you have received this message in error, please immediately notify Lenindarbi.Jayakumar at magna.com and delete this message and any attachment. Thank you.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake-developers/attachments/20180117/ec4993f6/attachment.html>


More information about the cmake-developers mailing list