Mengapa file `.ino` harus berada dalam folder dengan nama yang sama?

12

Saya mencoba untuk mengatur proyek yang sangat rumit dan saya ingin meletakkan semua kode aktual dalam folder bernama src(sumber), tetapi saya ingin menyimpan .inofile utama sebagai main.ino(juga akan di src). Lalu ketika saya mencoba membuka kodenya, IDE mengatakan itu main.inoharus ada di folder bernama main.

Kenapa ini?

Saya sepenuhnya memahami pesan kesalahan, tetapi mengapa penamaan file di Arduino harus begitu. Apakah ada cara untuk mengubahnya?

Dat Ha
sumber

Jawaban:

6

AFAIK, itu adalah kekhasan yang tertanam dalam Arduino IDE. Solusi terbaik yang dapat saya pikirkan adalah struktur file seperti:

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

, di mana myproj.cpp hanya #includemain.cpp. Ini akan membuat file proyek Anda "bersih" sehingga mereka harus bekerja di lingkungan yang lebih khas juga.

Memperbarui:

Saya meminjam nama "utama" dari pertanyaan Anda, tetapi pada pantulan, "utama" adalah nama yang disediakan, khususnya, setiap program C atau C ++ memiliki main.c atau main.cpp sebagai kode tingkat atas, yang disediakan oleh sistem jika Anda tidak menyediakannya. Jadi saya menghindari menggunakannya sebagai folder-dan nama-proyek (tapi jangan ragu untuk mencobanya) dan saya telah memperbarui diagram. Yang Anda perlukan adalah folder proyek dan file .ino di dalamnya, dengan nama yang sama. File .ino bisa

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

, misalnya, file kode tingkat atas Anda, dengan demikian menarik yang lainnya. Anda mungkin perlu .ino ke #includesetiap file di srcfolder, jika kompiler tidak mengetahui sendiri, di situlah file Anda yang lain.

BTW, jika Anda menggunakan nama main.cpp untuk file teratas Anda, itu harus memanggil fungsi setup () dan loop () (dan fungsi acara serial, jika Anda menggunakannya). Mungkin lebih baik membiarkan nama 'main' saja, biarkan sistem menyediakan main yang sama setiap program Arduino secara default, dan tulis kode proyek Anda dengan cara Arduino yang khas - dimulai dengan setup () dan loop ().

JRobert
sumber
myproj.cpp, Maksudmu myproj.ino? Karena saya tidak melihat di mana myproj.cpp!
Dat Ha
Ok, sedikit masalah, jika saya melakukan ini, beberapa fungsi dasar Arduino (seperti peta () dan analogRead ()) yang terdapat di sensor.cpp tidak akan dikenali oleh kompiler.
Dat Ha
Atau, jika bekerja pada kotak Windows, gunakan perintah persimpangan dan "tautkan" direktori nama yang benar ke direktori dengan nama yang lebih baik. Atau, jika bekerja pada kotak Linux, gunakan perintah tautan simbolik untuk melakukan hal yang sama.
st2000
(Lihat pembaruan saya - file .ino Anda mungkin harus menyertakan masing-masing file lainnya).
JRobert
3

Ketika Anda memiliki proyek yang terdiri dari sejumlah .INOfile, bagaimana IDE seharusnya tahu yang mana yang "utama"? Selama kompilasi, IDE menggabungkan semua .INOfile menjadi satu file monolitik. Ini melakukan ini dimulai dengan yang "utama" dan kemudian menambahkan masing-masing yang lain sesuai abjad sampai akhir.

Hal ini dilakukan dengan cara ini sehingga Anda termasuk dan variabel global, yang harus Anda masukkan dalam .INOfile "utama" Anda , berada di awal program selesai.

Untuk melakukan ini, IDE harus mengetahui file mana yang merupakan "utama". Dan cara kerjanya adalah dengan menemukan satu yang diberi nama sama dengan folder tempat sketsa berada.

Di UECIDE saya mengambil satu langkah lebih jauh dan mengubah seluruh folder menjadi dokumen majemuk sehingga Anda tidak lagi harus memasukkan folder dan membuka .INOfile untuk membuka sketsa - folder yang sebenarnya adalah seluruh proyek sketsa. Sekali lagi jenis folder ini diidentifikasi memiliki .INOfile di dalamnya yang bernama sama dengan folder.

Majenko
sumber