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.

[参考译文] CODECOMPOSER:Linux 构建行为不正确

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/1494930/codecomposer-linux-build-behavior-incorrect

部件号:CODECOMPOSER

工具/软件:

你(们)好  

我一直在尝试在 Linux 环境(VM;Ubuntu 24.04 LTS;CCSTheia v20.1.0.6_1.7.0)中进行编译。  

现提出以下意见  

a)由于设置了不正确的括号、报告了错误(我认为我已经找到问题-详情请参阅下文)

b)-mthumb -O0之后的两个 include 指令为空

这是尽管根据 subdir_rules.mk 文件、应该是提到的 Projecttroot 和 projectroot/configname 文件夹、在工程设置中奇怪的是、这些文件夹设置为正确的值时可以在工程设置中使用

以下是 IDE 启动过程:

如果按如下方式运行、它将在这些 include 指令中生成正确的路径  

回到括号问题:

我发现、一旦从项目设置(定义如下;在 Windows 上工作无缺陷)中删除了自定义 Debug_remove 宏定义、问题就会自行解决

因此、Linux 上的 CCS 显然与直接通过编译器设置(而不是代码文件)定义宏等函数有关...

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

    快速跟进:  

    这两个问题是互连的。例如、如果在启动 IDE 时未设置已讨论过的变量、但从工程设置中删除了 DEBUG_REMOVE 定义、则两个 Include 指令仍然具有不正确的值  

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

    Marc、

    感谢您报告这些问题。 我们将尝试重现这些问题、并在我们能够做到的情况下将错误归档以跟踪它们。

    此致、

    Ricky

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Unknown 说:
    因此、显然 Linux 上的 CCS 与直接通过编译器设置(而不是代码文件)定义宏等函数存在问题...

    很抱歉、对此延迟的回复。 我可以重现问题。 如您所说、我在 Linux 上看到问题。 Windows 不会出现此问题。

    为了从公式中删除 CCS IDE、我直接在命令行中调用编译器。 带有 debug_remove 定义(带括号)的第一个调用出现了相同的问题。 删除该文件时、文件构建良好:

    在 Windows 上没有问题:

    我将提请编译器专家注意此主题、以获得更多见解。

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

    我认为在 Linux 上、您可以像这样避开括号:  

    debug_remove\(...\)=/*...*/

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

    这不是编译器问题。  这是一个关于命令 shell 引用规则的问题。  Windows 命令 shell 是如何做到的?  Linux 命令 shell 是如何做到的?  这是不一样的。  为了说明这一点、我编写了一个名为的简短程序 ECHO_CMD_LINE ...

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <stdio.h>
    int main(int argc, char *argv[])
    {
    int i;
    for (i = 0; i < argc; i++)
    puts(argv[i]);
    return 0;
    }
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    当我在 Windows 上运行它...

    Fullscreen
    1
    2
    3
    $ .\echo_cmd_line -DDebug_REMOVE(...)=/*...*/
    .\echo_cmd_line
    -DDebug_REMOVE(...)=/*...*/
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    当我在 Linux 上运行时...

    Fullscreen
    1
    2
    $ ./echo_cmd_line -DDebug_REMOVE(...)=/*...*/
    Badly placed ()'s.
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    在重要的情况下、此处是特定的 Linux shell /bin/tcsh 。  为了修复它,我建议使用单引号...

    Fullscreen
    1
    2
    3
    $ ./echo_cmd_line '-DDebug_REMOVE(...)=/*...*/'
    ./echo_cmd_line
    -DDebug_REMOVE(...)=/*...*/
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    在我使用的每一个类 Unix 的 shell 中,单引号总是告诉 shell 不处理引号内的任何内容,而是按原样传递它。  在 Windows 上,双引号通常具有相同的效果,但我有一个模糊的记忆被烧了几次。

    谢谢。此致、

    -乔治

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

    我知道、在 Linux 上、人们可以避开括号——但我 希望当有人以所描述的方式定义一个类似宏的函数时、IDE (知道它运行的是操作系统;显然)会为用户这样做  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    IDE (知道它运行的操作系统;很明显)会为用户执行此操作
     

    CCS 当前不考虑所使用的 shell /操作系统。 我们可以看看是否可以考虑这一点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们可以查看是否可以说明这一点。

    我为此提交了一张票。 跟踪链接: https://sir.ext.ti.com/jira/browse/EXT_EP-12388