为什么`.ino`文件必须位于相同名称的文件夹中?


12

我正在尝试组织一个非常复杂的项目,我想将所有实际代码放在一个名为src(source)的文件夹中,但是我想将主.ino文件保留为main.ino(也将在src)中。然后,当我尝试打开代码时,IDE表示main.ino必须在名为的文件夹中main

为什么是这样?

我完全理解错误消息,但是为什么在Arduino中的文件命名必须是这样。有办法改变吗?

Answers:


6

AFAIK,这是Arduino IDE中内置的一个怪癖。我能想到的最佳解决方法是文件结构,例如:

ArduinoWorkspace --- /myproj/ ----+ /src/ --------+ myproj.cpp
                                  + myproj.ino    + sensor.h
                                                  + sensor.cpp
                                                  + (more files)

,其中myproj.cpp只是#includemain.cpp。这应该使您的项目文件保持“干净”,以便它们也可以在更典型的环境中工作。

更新:

我从您的问题中借用了“ main”这个名称,但是经过反思,“ main”是一个保留名称,特别是,每个C或C ++程序都有main.c或main.cpp作为其顶层代码,如果您不提供任何一个。因此,我避免将其用作文件夹和项目名称(但可以尝试使用它),并且已经更新了该图。您需要做的是一个项目文件夹和其中的一个.ino文件,其名称相同。.ino文件可以

#include <src/anything-else-you-like>

,例如您的顶级代码文件,从而提取其他所有内容。您可能需要将.ino #include文件src夹中的每个文件,如果编译器自己没有找到它,那就是其他文件所在的位置。

顺便说一句,如果您确实在顶层文件中使用了名称main.cpp,它将必须调用setup()和loop()函数(如果使用,则调用串行事件函数)。最好保留名称“ main”,让系统提供每个Arduino程序默认使用的相同主程序,并以典型的Arduino方式编写项目代码-从setup()和loop()开始。


myproj.cpp你的意思是myproj.ino?因为我看不到哪里myproj.cpp
Dat Ha

好的,没什么问题,如果我这样做的话,编译器将无法识别sensor.cpp中包含的一些基本的Arduino函数(例如map()和AnalogRead())。
Dat Ha

或者,如果在Windows机器上工作,请使用junction命令并将正确名称的目录“链接”到具有更好名称的目录。或者,如果在Linux机器上工作,请使用符号链接命令执行相同的操作。
st2000

(请参阅我的更新-您的.ino文件可能必须包含其他每个文件)。
JRobert

3

当您的项目由多个.INO文件组成时,IDE应该如何知道哪个是“主要”文件?在编译期间,IDE将所有.INO文件连接在一起,成为一个整体文件。它从“主要”开始,然后将其他每个按字母顺序附加到末尾。

这样做是为了使应该在“主” .INO文件中放入的include和Global变量位于已完成程序的开头。

为此,IDE必须知道哪个文件是“主要”文件。解决该问题的方法是找到一个与草图所在的文件夹相同的文件夹。

UECIDE中,我更进一步,将整个文件夹转换为复合文档,因此您不必再输入文件夹并打开.INO文件即可打开草图-实际的文件夹本身就是整个草图项目。再次将这种文件夹标识为其中包含.INO与该文件夹相同名称的文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.