source

Arduino 스케치 디렉토리에 모든 라이브러리 유지

factcode 2022. 8. 24. 23:50
반응형

Arduino 스케치 디렉토리에 모든 라이브러리 유지

외부 라이브러리는 arduino 설치 디렉토리의 "라이브러리" 폴더에 배치해야 한다는 것을 알고 있습니다만, 저는 프로젝트를 위해 작성한 여러 라이브러리를 사용하고 있으며, 주로 코드를 자체 포함하거나 메인 pde 파일에서 제외하는 프로젝트를 진행하고 있습니다.다만, 메인 PDE 파일과 같은 디렉토리에 라이브러리를 배치하려고 하고 있기 때문에, 모든 것을 보다 간단하게 서브버전 상태로 유지할 수 있습니다(복수의 컴퓨터상에서 작업하고 있습니다).다만, 이전으로 되돌아가서 라이브러리를 개별적으로 동기화할 필요는 없습니다.또한 스케치 폴더를 쉽게 압축할 수 있고 필요한 모든 것이 들어있다는 것을 알기 위해서입니다.

새로운 탭으로 헤더 파일을 스케치에 추가하려고 했지만 전혀 작동하지 않는 것 같습니다.arduino IDE로 올라가도 상관없습니다.

서브디렉토리의 스케치디렉토리에 라이브러리를 추가하고, 다음에 링크해 보겠습니다.

#include "mylib/mylib.h"

그리고.

#include <mylib/mylib.h>

그러나 둘 다 file not found 오류가 발생합니다.

이게 가능합니까?그리고 만약 그렇다면, 어떻게 그것들을 빌드용 메인 파일에 포함시킬 수 있을까요?자신의 서브디렉토리에 있는 것이 바람직합니다.

저도 같은 문제가 있었어요.Arduino IDE > 1.8로 해결.참조에 의하면, 새로운 IDE(?)에 특화된 것 같습니다(하단 링크 참조).

라이브러리 폴더를 작성하기 전에 "src" 하위 디렉토리를 추가해야 합니다.따라서 기본적으로 프로젝트의 모양은 다음과 같습니다.

/SketchDir (with *.ino file)  
/SketchDir/src  
/SketchDir/src/yourLib (with .h and .cpp file)  

그리고 마지막으로 스케치에서는 다음을 참조합니다.

#include "src/yourLib/yourLib.h"  

그렇지 않으면 "src" 폴더가 없는 경우 yourLib.cpp 파일을 찾을 수 없다는 오류 메시지가 나타납니다.

주의: Windows 시스템이 다를 경우를 대비해 사용하고 있으며, 실제로는 VS Code를 Arduino IDE의 래퍼로 사용하고 있습니다.하지만 두 IDE 모두 이 구조로 컴파일합니다.

참고 자료: https://forum.arduino.cc/index.php?topic=445230.0

나에게 효과가 있었던 것은, 예를 들면 「src」라고 하는 dir를 sketch dir 아래에 작성하고, 그 아래에 각 퍼스널 라이브러리의 dir를 작성하는 것입니다.

예제:

저는 DeventricleRobot이라는 프로젝트를 가지고 있는데, 그 아래에는 obstaclerobot(IDE에 의해 자동으로 작성됨)이라는 이름의 제 스케치 폴더와 "obstacleRobot.ino"가 있습니다.

지금까지 다음과 같은 것이 있습니다.

 /ObstacleRobot
    /obstaclerobot
       obstacleRobot.ino

그리고 이 프로젝트와 완전히 관련된 개인 라이브러리를 포함시키고 싶었지만 IDE 라이브러리에 포함시키는 것은 의미가 없습니다. 사실 로봇의 각 부분에 대해 이 작업을 수행하고 싶지만 아직 작업 중입니다.

결국 나에게 효과가 있었던 것은, 다음과 같다.

 /ObstacleRobot
    /obstaclerobot
       obstacleRobot.ino
       /src
          /Sonar
             Sonar.h
             Sonar.cpp

그리고 메인 스케치에서 해야 할 일은 다음과 같이 포함을 쓰는 것입니다.

#include "src/Sonar/Sonar.h"

그리고 그게 다예요.

저는 당신의 의견에 동의합니다.이것은 소프트웨어를 개발하기 위한 참을 수 없는 방법입니다.메인 프로그램과 같은 디렉토리에 필요한 모든 파일이 필요합니다.

이것을 피하기 위해, 저는make싱글을 짜다.h내 파일링.h그리고..cpp소스 - 이 Makefile에서 사용되는 것을 확인할 수 있습니다.

PREPROCESS=gcc -E -C -x c -iquote ./src
# -E : Stop after preprocessing.
# -C : Don't discard comments.
# -x c : Treat the file as C code.
# -iquote ./src : Use ./src for the non-system include path.

TARGETS=sketches/morse/morse.h

all: $(TARGETS)

clean:
    rm $(TARGETS)

%.h: %.h.in
    $(PREPROCESS) $< -o $@

Arduino는 파일 엔딩에 대해 매우 까다롭습니다..cpp또는.cc디렉토리의 파일은 소스에서 자동으로 사용되며, 파일이 아닌 파일은 포함할 수 없습니다..cpp,.cc또는.h- 그래서 이게 유일한 방법이야.

자바스크립트 파일도 여기서 조립할 때 비슷한 방법을 사용합니다.

이를 위해서는 다음 명령어를 실행해야 합니다.make파일을 편집한 후, 어쨌든 외부 에디터(Emacs)를 사용하고 있기 때문에, 이것은 저에게 있어서 전혀 번거롭지 않습니다.

제가 가지고 있는 스케치는"*.h"그리고."*.cpp"라이브러리 파일은 실제로 스케치 파일과 같은 폴더에 있고, 나는 그것들을 다음과 같이 부릅니다."someheader.h"그리고 만약에 제가 이 방에 들어가서sketch메뉴와add file...스케치를 닫았다가 다시 열 때까지 파일이 나타나지 않습니다.

안타깝게도 Arduino IDE는 형편없고 개선될 기미가 보이지 않습니다.실제 빌드 시스템은 없으므로 단일 디렉토리에 있는 프로그램만 빌드할 수 있습니다.

유일한 해결 방법은 makefile을 쓰는 것입니다.그러면 실제 IDE를 사용할 수 있습니다.언젠가 누군가 QtCreator용 Arduino 플러그인을 써주길 바랍니다.

다음은 make file 예시입니다.

http://volker.top.geek.nz/arduino/Makefile-Arduino-v1.8

하나의 복사 명령으로 스크립트를 작성하고 라이브러리가 있는 모든 곳에서 arduino IDE 라이브러리 폴더에 libs를 복사하는 것은 어떨까요?

이렇게 하면 원하는 파일 구조를 유지하고 IDE 라이브러리의 요건을 쉽게 사용할 수 있습니다.

이런 게 나한텐 효과가 있어

cp -r mylibs/* ~/Documents/programs/arduino-1.5.8/libraries/.

경로는 내 파일 구조에 상대적입니다.

이게 도움이 됐으면 좋겠네요.이것은 가까운 장래에 이 글을 읽을 수 있을 것이라는 나의 미래 모습도 포함하고 있다.여느 때처럼!

J

저도 같은 문제가 있었습니다(코드 자체 완료를 좋아합니다). 그래서 메모해 두겠습니다.MyPdeSketch.pde사용.MyLibClass.cpp; 그럼 이렇게 정리를 해놨어요.

/path/to/skdir/MyPdeSketch/MyPdeSketch.pde
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.h

(원칙적으로/path/to/skdir/여기서와 동등하다~/sketchbook/)

 

제게 효과가 있었던 것은 다음과 같습니다.

mkdir /path/to/arduino-0022/libraries/MyLibClass
ln -s /path/to/skdir/MyPdeSketch/MyLibClass/MyLibClass.* /path/to/arduino-0022/libraries/MyLibClass/

IDE를 재기동하면,MyLibClass는 "Sketch/Import Library" 아래에 표시됩니다.

라이브러리 클래스 파일이 다른 라이브러리 파일을 참조할 수 있는 유일한 방법은 모든 파일이 동일한 메인에 있다고 가정하고 상대적으로 ('현재 위치'에서) 포함하는 것입니다.arduino-0022/libraries폴더(스택 오버플로우 관련 질문:Arduino IDE를 사용하여 다른 라이브러리의 라이브러리를 포함할 수 있습니까?)

그렇지 않은 경우 심볼링크가 가능해야 합니다.MyLibClass에 직접 기입하다arduino-0022/libraries(디렉토리를 수동으로 작성한 다음 파일을 심볼릭 링크할 필요가 없습니다).같은 이유로 대체 위치로 심볼 링크~/sketchbook/libraries문제가 될 수도 있습니다.

마지막으로, 보다 나은 조직은 다음과 같습니다.

/path/to/skdir/MyLibClass/MyLibClass.cpp
/path/to/skdir/MyLibClass/MyLibClass.h
/path/to/skdir/MyLibClass/MyPdeSketch/MyPdeSketch.pde

...에 심볼링크를 한 후libraries, 를 강제합니다.MyPdeSketch의 예에 따라 나타나다MyLibClassArduino IDE의 라이브러리(단, 하나의 디렉토리 아래에 여러 클래스 폴더를 포함하는 경우에는 해당되지 않을 수 있습니다).

편집: 또는 Makefile을 사용합니다.Makefile은 직접 사용할 수 있습니다.avr-gccArduino IDE를 바이패스합니다(이 경우 스케치북 파일 구성이 다소 느슨해질 수 있습니다).

뭘 원하는지 알 것 같아요

프로젝트 폴더인 MYPROJ_FOLDER가 있고 사용자 정의 라이브러리의 하위 폴더가 더 들어 있는 라이브러리 폴더를 포함하려고 합니다.

다음 작업을 수행해야 합니다. 1- 다음과 같이 폴더를 만듭니다.

-MyProjFolder
-MyProjFolder/MyProjFolder        

그런 다음 .ino 확장자 - MyProjFolder/ MyProjFolder/ MyProjFolder로 폴더 이름을 가진 파일을 만듭니다.이노

2 - create libraries folder : - My Proj Folder / libraries <<< name is not a optional. (라이브러리 폴더 작성)는, 이러한 방법으로 호출합니다.

3 - MyProjFolder/libraries/lib1 - MyProjFolder/lib1/lib1.cpp - MyProjFolder/libraries/lib1/examples < 이것은 폴더 - MyProjFolder/libraries/lib1/examples < >입니다.

repeat step 3 as much as you want

also check http://arduino.cc/en/Guide/Libraries

I did it a little differently. Here is my setup.

Visually this is the directory layout

~/Arduino/Testy_app/  <- sketch dir
                   /Testy_app.ino <- has a #include "foo.h"
                   /foo           <- a git repo
                   /foo/foo.h
                   /foo/foo.cpp

Here is how I build:

~/Arduino/Testy_App/$ arduino-cli compile --library "/home/davis/Arduino/Testy_app/foo/" --fqbn arduino:samd:mkrwan1310  Testy_app

If you wish to be more elaborate and specify libs and src dirs, this also works

~/Arduino/Testy_app/  <- sketch dir
                   /Testy_app.ino <- has a #include "foo.h"
                   /lib           <- a git repo
                   /lib/foo/src/foo.h
                   /lib/foo/src/foo.cpp

and the build method is:

~/Arduino/Testy_App/$ arduino-cli compile --library "/home/davis/Arduino/Testy_app/lib/foo/src" --fqbn arduino:samd:mkrwan1310  Testy_app

One more bit of tweaking needs to be done to include files from the lib dirs to main dir. If you need to do that, this is the work around:

~/Arduino/Testy_app/  <- sketch dir
                   /Testy_app.ino <- has a #include 
"foo.h"
                   /inc/Testy_app.h
                   /foo           <- a git repo
                   /foo/foo.h
                   /foo/foo.cpp   < has a "include testy_app.h"

Then do the compile like this

~/Arduino/Testy_App/$ arduino-cli compile \
--library "/home/davis/Arduino/Testy_app/inc" \ 
--library "/home/davis/Arduino/Testy_app/foo/src" \ 
--fqbn arduino:samd:mkrwan1310  Testy_app

Following the lines of Hefny, make your project an example for your library.

For example (Unix env), let's say the libraries are in ~arduino/libraries

Your create your project ~arduino/libraries/MyProject, your libraries go there (for example ~/arduino/libraries/MyProject/module1.h ~/arduino/libraries/MyProject/module1.cpp ~/arduino/libraries/MyProject/module2.h ~/arduino/libraries/MyProject/module2.cpp

Now: mkdir -p ~arduino/libraries/MyProject/examples/myproj

edit ~arduino/libraries/MyProject/examples/myproj/myproj.ino (note that this is not examples/myproj.ino but examples/myproj/myproj.ino)

Restart the IDE, you should find your project in the menu File/Example/MyProject.

Also note that you do the include with #include

ReferenceURL : https://stackoverflow.com/questions/4705790/keeping-all-libraries-in-the-arduino-sketch-directory

반응형