This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] 由于-cmd_file 选项限制或错误、TI-cgT-ARM 编译器在使用 cmake 的大型工程中无法正常工作

Guru**** 2589275 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1003257/ti-cgt-arm-compiler-can-not-work-well-in-a-large-project-with-cmake-because-of---cmd_file-option-limitation-or-bug

您好!

我们使用 cmake 和 ti-cgt-arm 编译器为工程设置编译环境。 链接器或归档 器选项将非常长、因为要链接或归档的目标文件太多。 这将超出系统的命令行限制并导致链接或存档失败。 Cmake 可以通过使用 类似这样的响应文件来处理此问题、

  设置(CMAKE_C_USE_RESPONSE_FILE_TO_ARTESS_TRUE)
  设置(CMAKE_CXX_USE_RESPONSE_FILE_TO_ARTS true)

因此、如果使用 TI 编译器、cmake 将执行以下操作、

cmake 生成的默认命令行如下所示、

  armar.exe qr library.a  

  armcl.exe --run_linker --output_file=name.out --map_file=name.map

使用 响应文件后、命令行将与此类似

  armar.exe qr library.a  --cmd_file=object.rsp

  armcl.exe --run_linker --output_file=name.out --map_file=name.map --cmd_file=object.rsp

问题是 --cmd_file 选项 无法 在 上述命令中工作。 因此 、--cmd_file 基本上是无用的、因为只有对象或库具有非常长的字符、需要将其放入文件中。

下面是 cmake 安装目录中 TI CGT ARM 编译器的 cmake 代码片段

设置(CMAKE_${lang}_archive_create " QR ")
设置(CMAKE_${lang}_archive_append " 质量保证 ")
设置(CMAKE_${lang}_archive_finish "")

#在--run_linker 标志之后、不可能有响应文件
set (CMAKE_${lang}_RESPONSE_FILE_LINK_FLAG ") #如果 TI 编译器支持、则应为"-cmd_file="
设置(CMAKE_${lang}_use_response _file_for_libraries 0)
设置(CMAKE_${lang}_use_response _file_for_objects 0)

设置(CMAKE_${lang}_link_executable " --run_linker --output_file= --map_file= 映射 ")

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们的构建专家今天已结束、但将于周一返回、并可能能够进一步评论。

    过去、我们在 Code Composer Studio 中遇到了相同的命令长度问题。  为了解决这一限制、我们使用--cmd_file 选项。

    作为构建的一部分、CCS 正在生成一个 ccsObjs.opt 文件

    对于我构建库的某个工程、该文件的内容如下所示:  

    "./adc.obj ""./asycsctl.obj ""./cabl.obj ""./clb.obj ""./cmpss.cfg""./cputtimer.obj "./dac.obj "./dc/dcs.obj "./ecobj ".p./epdm././epdm./././epdm././././epdm./././epdm./obj "./././epdm././././epdm././././././././././.obj

    然后、当我查看 CCS 生成的 makefile 文件时、我可以看到该文件随后使用--cmd_file 传递到归档器

    @echo "调用:C2000归档器"

    "/Applications/ti/ccs1031/ccs/tools/compiler/ti-cgt-c2000_20.2.4.LTS/bin/ar2000 r "driverlib_coff .lib"--cmd_file=./ccsObjs.op

    rsp 文件是什么样子的?  --cmd_file 选项实际上就像将内容粘贴到命令行中一样,因此它必须采用工具所需的格式。

    此致、

    John

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    RSP 文件只是一个文本文件、内容与此类似、每个对象用一 个空白字符隔开

    1.c.obj 2.c.obj 3.c.obj 3.c.ojb

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="482947" URL"~/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1003257/ti-cgt-arm-compiler-can-not-work-well-in-a-large-project-with-cmake-because-of---cmd_file-option-limitation-or-bug "]问题是 --cmd_file 选项 无法 在 上述命令中工作。[/quot]

    请更加具体地说明出现了什么问题。

    请将 cmake 自动生成的 object.rsp 文件之一附加到下一个帖子。  由于论坛仅接受几种不同的文件类型、因此请将文件扩展名.txt 添加到论坛中。  这将形成文件名 object.rse.txt

    谢谢、此致、

    乔治