CMakeLists.txt
cmake_minimum_required(VERSION 3.12)
include(pico_sdk_import.cmake)
project(pico-projects)
pico_sdk_init()
add_executable(blink_led blink_led.c)
target_link_libraries(blink_led pico_stdlib)
pico_add_extra_outputs(blink_led)
blink_led.c
#include "pico/stdlib.h"
int main(){
// initialise GPIO (Green LED connected to pin 25)
gpio_init(25);
gpio_set_dir(25, GPIO_OUT);
//Main Loop
while(1){
gpio_put(25, 1); // Set pin 25 to high
sleep_ms(500); // 0.5s delay
gpio_put(25, 0); // Set pin 25 to low
sleep_ms(500); // 0.5s delay
}
}
Thanks for your very helpful videos. You created the blink project right under the pico-projects directory. What if i wanted to organize my projects better so that every project had a unique sub-folder under pic-projects, so for example pico-project/blinkfolder and other projects in their own sub-folders. What would change in the Cmakefile.txt, and in the environment variables if any. Also please illustrate with a project where there are multiple files, like main.c, blink.c that have dependencies etc, (ie: something beyond the little toy examples)
thanks
bammi
Hi Bammi, Thank you for your comment, hopefully I can answer your questions!
Firstly, regarding folder structure, it is totally possible to organise your folder structure like this, looking back I should have covered this in my videos! It will require no modification to the environment variables and little modification to the CMakeLists files. Each sub-folder (i.e Pico-Projects/projectX) will need its own CMakeLists.txt file however it is a little shorter and can only needs the add_executable, target_link_libraries, pico_add_extra_outputs and any other project specific instructions. The parent folder (i.e Pico-Projects) will need the pico_sdk_import.cmake file and a CMakeLists.txt file which specifies the cmake_minimum_required, include(pico_sdk_import.cmake), pico_sdk_init(). Also in this CMakeLists.txt file are all the sub-folders (individual projects) listed with the add_subdirectory(projectX).
This structure can be seen with the Pico-Examples folder (https://github.com/raspberrypi/pico-examples) and you can see how the ‘Parent’ CMakeLists.txt file is structured compared to the sub-folder ones. When in VS Code (assuming you are using VS Code) you open the parent folder “Pico-Projects) and can then select which sub-folder to build by selecting the [all] button near the build icon.
Let me know if you have any further questions regarding this, I might add this to a queue of upcoming videos.
Secondly, in terms of adding extra dependencies, in the CMakeLists.txt file you can add multiple files to the add_executable function such as:
add_executable(hello_world
main.c
interrrupts.c
)
If you want to add other library dependencies you can use the function add_libraries(dependency1.c …. Dependency2.c …) and if you want to add full directories you use the target_include_directories. Documentation available here: https://cmake.org/cmake/help/latest/command/add_library.html, https://cmake.org/cmake/help/latest/command/target_include_directories.html.
Hopefully this answered your questions, let me know!
Kind regards and have a nice day,
Mark
Thank you Mark
Appreciate your prompt reply and all your efforts.
cheers,
bammi
Excellent tutorials. Congratulations!
Hi,
When I want to configure the task like you do at 3:39, it doesn’t do anything. It only prompts me to create a tasks.json. Do you know the solution?
Fantastic tutorial. I especially like the suggestion to include multiple folders/files under pico-projects.
For me, I would like to see a tutorial for a Pico I2C scanner with output over USB-uart, and how to invoke the terminal in VS.
Hi Charl south Africa, Thonny is not working right on my windows 10, i ve got Raspberry Pi Pico want lern machine learning
Hi,
Thanks for your efforts!
Like for Sem above nothing happens when I go to Terminal -> Configure Tasks…
Do you have a suggestion as to why that could happen?
I have followed your previous video “How to Set Up Visual Studio Code to Program the Pi Pico (Windows)”. And everything else has worked sofar.
Hi,
If you try pressing ctrl + shift + P, and in the search that comes up type configure, do you see the “CMake: configure” option?
Yes I do…
That solved it for me 🙂
Thank you a lot.
The above is not totally correct, sorry.
At Terminal -> Configure Tasks… I get a drop down menu. The editable field says; “Select a task to configure” with four options;
“Create tasks.json file from template”
* “Grunt task detection is turned off. Enable grunt task detection…”
* “Gulp task detection is turned off. Enable gulp task detection…”
* “Jake task detection is turned off. Enable jake task detection…”
(“*” is supposed to mimic a cogwheel like the one on my monitor)
That is as far as I have been.
Thank you for the excellent explanations.
I am struggling to add an additional library to the cmakelists.txt file. For my project I want to use a third-party library for the SPI MAX7219 display unit.
arget_link_libraries(
PCB1816
pico_stdlib
hardware_spi
DigitLedDisplay – this is the header file located in the rood directory.
When I run make I get an error ./../../../arm-none-eabi/bin/ld.exe: cannot find -lDigitLedDisplay
Is it possible to add additional libraries to the cmakelists file ?
)
Hi Team,
I’m getting below while I try to build. Any idea on how to solve this error?
[build] Starting build
[proc] Executing command: “C:\Program Files\CMake\bin\cmake.EXE” –build c:/development/pico/pico-projects/build –config Debug –target blink_led -j 10 —
[build] Warning: NMake does not support parallel builds. Ignoring parallel build command line option.
[build] The system cannot find the file specified
[build] CMake Error: Generator: execution of make failed. Make command was: nmake /nologo blink_led &&
[build] Build finished with exit code 1