Hello, I am using the nRF Connect SDK version 2.1.2. Working on a prototype using nRF52840-DK
I created the project using the `blinky` as the template. In the project, I would like to have a library called led and link the library to the CMake target app so I have the following folder structure
|--- CMakeLists.txt // 1. This is the default CMake file generated by default
|--- src
|
|--- led // 2. Added a subfolder under the folder src, trying to build a library and include the library in the target app in the default CMake file that is in the project root
| |- CMakeLists.txt // 3. I am adding an extra CMake file to config the led library
| |- led.h
| |- led.cpp
|--- main.cpp // 4. Modified the default main.c to main.cpp since I have the CONFIG_CPLUSPLUS=y in the project KConfig file
So the content of the CMake Lists.txt (3) in the led subfolder is:
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) add_library(led "${CMAKE_CURRENT_SOURCE_DIR}/led.h" "${CMAKE_CURRENT_SOURCE_DIR}/led.cpp" ) target_include_directories(led PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}") target_compile_definitions(led PRIVATE LED_VERSION=0.1.0)
The modified CMakeLists.txt (1) in the root folder is:
# SPDX-License-Identifier: Apache-2.0 # https://cliutils.gitlab.io/modern-cmake/ cmake_minimum_required(VERSION 3.20.0) find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) project(sensors VERSION 0.1.0) #set_property(GLOBAL PROPERTY USE_FOLDERS ON) # app list(APPEND PATH_HEADER "src") # led set(PATH_LED src/led) add_subdirectory(${PATH_LED}) list(APPEND FEATURES led) # link led list(APPEND PATH_HEADER ${PATH_LED}) target_link_directories(app PRIVATE ${PATH_LED}) target_link_libraries(app PRIVATE ${FEATURES}) target_include_directories(app PRIVATE ${PATH_HEADER}) target_sources(app PRIVATE src/main.cpp)
The led.h/cpp is pretty much empty:
header file:
#pragma once class led { public: bool enable = false; void toString() const; };
and the cpp file
#include "led.h" #include <zephyr/zephyr.h> void led::toString() const { // LED_VERSION is defined in the CMake printk("is led enabled? %d, version %s", this->enable, LED_VERSION); }
Eventually, when I rebuild the CMake I have the following error:
d:\projects\Nordic\2.1.1\L2_DeviceTree\src\led\led.cpp:2:10: fatal error: zephyr/zephyr.h: No such file or directory 2 | #include <zephyr/zephyr.h> | ^~~~~~~~~~~~~~~~~ compilation terminated.
It seems the led library is unable to find the zephyr headers, I think the Zephyr configuration should be inherited from the root folder's CMake file, but it seems that is not the case, any suggestions to fix the compile error. I feel like I missed something in the CMake, but I just can not find what is missing 