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.

[参考译文] CCS/MSP430F5438A:无法在编译器的“包括选项”中包括头文件

Guru**** 2601915 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/627912/ccs-msp430f5438a-not-able-to-include-header-files-in-compiler-include-options

部件号:MSP430F5438A

工具/软件:Code Composer Studio

您好,

我在项目中创建了src/Driver/I2C文件夹,并在其中创建了i2c_driver.c和i2c_driver.h文件。

我在项目中创建了src/Test/I2C文件夹,并在其中创建了test_i2c.c和test_i2c.h文件。

要使用驱动程序文件i2c_driver.c,我希望在test_i2c.c中包含i2c_driver.h  

执行此操作的一种方法是,在  test_i2c.c中添加#include "./../Driver/I2C/i2c_driver.h"

我尝试的另一种方法是在  “项目属性”的“编译器的包括选项”中包括src/Driver/I2C文件夹,并   直接在test_i2c.c中添加#include "i2c_driver.h"。 但编译器抛出错误,提示 “#1965 open source file "i2c_driver.h"。

我想知道为什么我在包含驱动程序头文件的文件夹时收到错误。

是否有更好的方法来实现?

为了总结我的问题,我将在下面发布我的项目的屏幕截图:

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

    我通常使用一个略有不同的变量,但您所拥有的变量应该有效。

    我创建了一个具有相同基本目录结构的项目:

    然后添加了相同的包含搜索路径。  请注意,当您将鼠标放在...上时,它将显示完整路径,以便您检查是否正确。

    通常,我使用的变量更像这样,因为当我单击工作区按钮并选择项目下的文件夹时,插入变量的方式就是这样。

    但这真的不重要,好像我添加了与您相同的变量,因为它适用于我。  

    我在屏幕截图中注意到的一件事是某些文件夹(如src)上的小扳手图标。  这意味着该文件夹设置了特定于文件的生成选项。  我担心生成源文件时不使用包含路径,因为您已覆盖该文件夹中文件的生成选项。  如果在此之后将include路径添加到项目,则在生成该文件夹下的文件时不会使用该路径。

    您可以通过几种快捷方式来检查。

    1. 在生成test_i2c.c时查看控制台中的输出 ,我相信您会注意到,有一个--include_path是头文件的位置。
    2. 右键单击“项目资源管理器”中的test_i2c.c,然后选择“属性”。  检查包含选项下列出的路径。  很可能不存在。

    此致,

    John

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

    我在一些文件夹上启用了CCS内置MISRA检查,这就是为什么有那个扳手图标的原因。 但是,我无法在整个项目上启用MISRA,因为它将开始为所有TI头文件提供错误。 不管怎样,我禁用了MISRA检查,“无法找到头文件”的问题得到了解决。

    我能问你,你提到“我通常使用一个略有不同的变量,但你所拥有的应该是有效的”时,你说什么?

    我还有另一个问题要问您。 如何整齐地包含头文件? 如果我开始在"包括"选项中添加每个单独的头文件,那么列表肯定可以超过数百到几百个。 您能建议我采取其他方式吗?

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

    我使用的变量与您使用的${PROWORKS_loc:/${ProjName}/src/Driver/I2C}与${PROJEMENT_ROOT}/SCR/Driver/I2C略有不同。 我使用了第一个,因为当我单击“添加”按钮添加路径,然后单击“工作区”按钮并浏览到我想要的文件夹时,CCS/Eclipse将如何插入变量。 任何一个都可以正常工作。

    如果头文件分散在许多不同的文件夹中,您最终可能会有许多包含路径添加到构建选项中。 请注意,您不会为每个文件仅添加包含文件所在的每个位置。

    如果要减少路径数 ,可以添加一些常用基本路径作为包含路径,然后调整#include语句以包含一些相对路径信息。

    例如,在这种情况下,我可以将${PROJECT _ROOT}/SCR/DRIVER/作为我的include路径,然后将 #include "i2c_driver.h"更改为 #include <I2C/i2c_driver.h>

    然后对于其他文件,我可以使用 #include <SPI/nameofheader.h>

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

    非常感谢John的提示。

    你所建议的方式真的会帮助我解决问题。  

    我想问您的另一个问题是,在每个目录和子目录中都有一种使用makefile的方法;目录中的makefile将使用子目录文件递归地编译所有文件和子目录。 例如,中有一个makefile

    例如 ,I2C文件夹中有一个makefile,用于编译i2c_driver.c,而SPI文件夹中有另一个makefile tp编译SPI_driver.c. 在一个目录上,Drivers文件夹将有一个makefile,该makefile将从相应子目录的makefile收集结果,并编译其自己的源文件。 和上一个目录一样。  

    这是否可行? 是否有任何说明?

    谢谢,此致,

    安杰特

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

    我想您可以这样做,但您需要手动操作。 CCS/Eclipse没有自动执行的方法。 因此,您必须自己创建和维护所有makefile。

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