我觉得这个问题已经问了很多次了,但我发现的答案似乎都不适合我。我对CMake和C/C++非常陌生,因为我来自Java世界,我很难理解cmake和它是如何工作的。
不管怎样,基本上我有下面的文件夹结构。这是一个专门的以色列国防军项目,所以我不知道这是否与我遇到的情况有关。
main
-CMakeLists.txt
-main.cpp
-wifi.cpp
Metriful
-CMakeLists.txt
-Metriful_sensor.cpp
-Metriful_sensor.h
-Wifi_functions.h
-Wifi_functions.cpp
CMakeLists.txt
Makefile
现在,我要做的就是包括Metriful子目录,这样我就可以使用“库”提供的函数。现在,根目录中的CMakeLists.txt如下所示:
cmake_minimum_required(VERSION 3.5)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(ESP_32_WROOM32_SENSOR_-_Metriful)
include_directories("Metriful")
虽然在我的main.cpp中包含“main.cpp”似乎不起作用,但还是失败了:
cmake -G Ninja .. <
-- ccache will be used for faster recompilation
-- Building ESP-IDF components for target esp32
-- Project sdkconfig file C:/Users/User/PlatformIO/ESP32_WROOM32_Sensor_-_Metriful/sdkconfig
-- Could NOT find Perl (missing: PERL_EXECUTABLE)
CMake Warning (dev) at C:/Users/User/esp/esp-idf/components/mbedtls/CMakeLists.txt:114 (target_sources):
Policy CMP0076 is not set: target_sources() command converts relative paths
to absolute. Run "cmake --help-policy CMP0076" for policy details. Use
the cmake_policy command to set the policy and suppress this warning.
A private source from a directory other than that of target "mbedcrypto"
has a relative path.
This warning is for project developers. Use -Wno-dev to suppress it.
-- App "ESP_32_WROOM32_SENSOR_-_Metrifu" version: 637cfde-dirty
-- Adding linker script C:/Users/User/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.ld
-- Adding linker script C:/Users/User/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.api.ld
-- Adding linker script C:/Users/User/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.libgcc.ld
-- Adding linker script C:/Users/User/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-data.ld
-- Adding linker script C:/Users/User/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.syscalls.ld
-- Adding linker script C:/Users/User/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-funcs.ld
-- Adding linker script C:/Users/User/esp/esp-idf/components/esp_rom/esp32/ld/esp32.rom.newlib-time.ld
-- Adding linker script C:/Users/User/PlatformIO/ESP32_WROOM32_Sensor_-_Metriful/build/esp-idf/esp32/esp32_out.ld
-- Adding linker script C:/Users/User/esp/esp-idf/components/esp32/ld/esp32.project.ld.in
-- Adding linker script C:/Users/User/esp/esp-idf/components/esp32/ld/esp32.peripherals.ld
-- Components: app_trace app_update asio bootloader bootloader_support bt cbor cmock coap console cxx driver efuse esp-tls esp32 esp_adc_cal esp_common esp_eth esp_event esp_gdbstub esp_hid esp_http_client esp_http_server esp_https_ota esp_https_server esp_hw_support esp_ipc esp_local_ctrl esp_netif esp_pm esp_ringbuf esp_rom esp_serial_slave_link esp_system esp_timer esp_websocket_client esp_wifi espcoredump esptool_py expat fatfs freemodbus freertos hal heap idf_test jsmn json libsodium log lwip main mbedtls mdns mqtt newlib nghttp nvs_flash openssl partition_table perfmon protobuf-c protocomm pthread sdmmc soc spi_flash spiffs tcp_transport tcpip_adapter tinyusb ulp unity vfs wear_levelling wifi_provisioning wpa_supplicant xtensa
-- Component paths: C:/Users/User/esp/esp-idf/components/app_trace C:/Users/User/esp/esp-idf/components/app_update C:/Users/User/esp/esp-idf/components/asio C:/Users/User/esp/esp-idf/components/bootloader C:/Users/User/esp/esp-idf/components/bootloader_support C:/Users/User/esp/esp-idf/components/bt C:/Users/User/esp/esp-idf/components/cbor C:/Users/User/esp/esp-idf/components/cmock C:/Users/User/esp/esp-idf/components/coap C:/Users/User/esp/esp-idf/components/console C:/Users/User/esp/esp-idf/components/cxx C:/Users/User/esp/esp-idf/components/driver C:/Users/User/esp/esp-idf/components/efuse C:/Users/User/esp/esp-idf/components/esp-tls C:/Users/User/esp/esp-idf/components/esp32 C:/Users/User/esp/esp-idf/components/esp_adc_cal C:/Users/User/esp/esp-idf/components/esp_common C:/Users/User/esp/esp-idf/components/esp_eth C:/Users/User/esp/esp-idf/components/esp_event C:/Users/User/esp/esp-idf/components/esp_gdbstub C:/Users/User/esp/esp-idf/components/esp_hid C:/Users/User/esp/esp-idf/components/esp_http_client C:/Users/User/esp/esp-idf/components/esp_http_server C:/Users/User/esp/esp-idf/components/esp_https_ota C:/Users/User/esp/esp-idf/components/esp_https_server C:/Users/User/esp/esp-idf/components/esp_hw_support C:/Users/User/esp/esp-idf/components/esp_ipc C:/Users/User/esp/esp-idf/components/esp_local_ctrl C:/Users/User/esp/esp-idf/components/esp_netif C:/Users/User/esp/esp-idf/components/esp_pm C:/Users/User/esp/esp-idf/components/esp_ringbuf C:/Users/User/esp/esp-idf/components/esp_rom C:/Users/User/esp/esp-idf/components/esp_serial_slave_link C:/Users/User/esp/esp-idf/components/esp_system C:/Users/User/esp/esp-idf/components/esp_timer C:/Users/User/esp/esp-idf/components/esp_websocket_client C:/Users/User/esp/esp-idf/components/esp_wifi C:/Users/User/esp/esp-idf/components/espcoredump C:/Users/User/esp/esp-idf/components/esptool_py C:/Users/User/esp/esp-idf/components/expat C:/Users/User/esp/esp-idf/components/fatfs C:/Users/User/esp/esp-idf/components/freemodbus C:/Users/User/esp/esp-idf/components/freertos C:/Users/User/esp/esp-idf/components/hal C:/Users/User/esp/esp-idf/components/heap C:/Users/User/esp/esp-idf/components/idf_test C:/Users/User/esp/esp-idf/components/jsmn C:/Users/User/esp/esp-idf/components/json C:/Users/User/esp/esp-idf/components/libsodium C:/Users/User/esp/esp-idf/components/log C:/Users/User/esp/esp-idf/components/lwip C:/Users/User/PlatformIO/ESP32_WROOM32_Sensor_-_Metriful/main C:/Users/User/esp/esp-idf/components/mbedtls C:/Users/User/esp/esp-idf/components/mdns C:/Users/User/esp/esp-idf/components/mqtt C:/Users/User/esp/esp-idf/components/newlib C:/Users/User/esp/esp-idf/components/nghttp C:/Users/User/esp/esp-idf/components/nvs_flash C:/Users/User/esp/esp-idf/components/openssl C:/Users/User/esp/esp-idf/components/partition_table C:/Users/User/esp/esp-idf/components/perfmon C:/Users/User/esp/esp-idf/components/protobuf-c
C:/Users/User/esp/esp-idf/components/protocomm C:/Users/User/esp/esp-idf/components/pthread C:/Users/User/esp/esp-idf/components/sdmmc C:/Users/User/esp/esp-idf/components/soc C:/Users/User/esp/esp-idf/components/spi_flash C:/Users/User/esp/esp-idf/components/spiffs C:/Users/User/esp/esp-idf/components/tcp_transport C:/Users/User/esp/esp-idf/components/tcpip_adapter C:/Users/User/esp/esp-idf/components/tinyusb C:/Users/User/esp/esp-idf/components/ulp C:/Users/User/esp/esp-idf/components/unity C:/Users/User/esp/esp-idf/components/vfs C:/Users/User/esp/esp-idf/components/wear_levelling C:/Users/User/esp/esp-idf/components/wifi_provisioning C:/Users/User/esp/esp-idf/components/wpa_supplicant C:/Users/User/esp/esp-idf/components/xtensa
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/User/PlatformIO/ESP32_WROOM32_Sensor_-_Metriful/build
Terminal will be reused by tasks, press any key to close it.
> Executing task: cmake --build . <
[1/9] Performing build step for 'bootloader'
ninja: no work to do.
[2/7] Building CXX object esp-idf/main/CMakeFiles/__idf_main.dir/main.cpp.obj
FAILED: esp-idf/main/CMakeFiles/__idf_main.dir/main.cpp.obj
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释
* ccache C:\Users\User\.espressif\tools\xtensa-esp32-elf\esp-2020r3-8.4.0\xtensa-esp32-elf\bin\xtensa-esp32-elf-g++.exe -DHAVE_CONFIG_H -DMBEDTLS_CONFIG_FILE=\"mbedtls/esp_config.h\" -DUNITY_INCLUDE_CONFIG_H -DWITH_POSIX -Iconfig -I../main -IC:/Users/User/esp/esp-idf/components/newlib/platform_include -IC:/Users/User/esp/esp-idf/components/freertos/include -IC:/Users/User/esp/esp-idf/components/freertos/port/xtensa/include -IC:/Users/User/esp/esp-idf/components/esp_hw_support/include -IC:/Users/User/esp/esp-idf/components/esp_hw_support/port/esp32/. -IC:/Users/User/esp/esp-idf/components/heap/include -IC:/Users/User/esp/esp-idf/components/log/include -IC:/Users/User/esp/esp-idf/components/lwip/include/apps -IC:/Users/User/esp/esp-idf/components/lwip/include/apps/sntp -IC:/Users/User/esp/esp-idf/components/lwip/lwip/src/include -IC:/Users/User/esp/esp-idf/components/lwip/port/esp32/include -IC:/Users/User/esp/esp-idf/components/lwip/port/esp32/include/arch -IC:/Users/User/esp/esp-idf/components/soc/include -IC:/Users/User/esp/esp-idf/components/soc/esp32/. -IC:/Users/User/esp/esp-idf/components/soc/esp32/include -IC:/Users/User/esp/esp-idf/components/hal/esp32/include -IC:/Users/User/esp/esp-idf/components/hal/include -IC:/Users/User/esp/esp-idf/components/esp_rom/include -IC:/Users/User/esp/esp-idf/components/esp_rom/esp32 -IC:/Users/User/esp/esp-idf/components/esp_common/include -IC:/Users/User/esp/esp-idf/components/esp_system/include -IC:/Users/User/esp/esp-idf/components/esp32/include -IC:/Users/User/esp/esp-idf/components/driver/include -IC:/Users/User/esp/esp-idf/components/driver/esp32/include -IC:/Users/User/esp/esp-idf/components/esp_ringbuf/include -IC:/Users/User/esp/esp-idf/components/efuse/include -IC:/Users/User/esp/esp-idf/components/efuse/esp32/include -IC:/Users/User/esp/esp-idf/components/xtensa/include -IC:/Users/User/esp/esp-idf/components/xtensa/esp32/include -IC:/Users/User/esp/esp-idf/components/espcoredump/include -IC:/Users/User/esp/esp-idf/components/esp_timer/include -IC:/Users/User/esp/esp-idf/components/esp_ipc/include -IC:/Users/User/esp/esp-idf/components/esp_pm/include -IC:/Users/User/esp/esp-idf/components/vfs/include -IC:/Users/User/esp/esp-idf/components/esp_wifi/include -IC:/Users/User/esp/esp-idf/components/esp_wifi/esp32/include -IC:/Users/User/esp/esp-idf/components/esp_event/include -IC:/Users/User/esp/esp-idf/components/esp_netif/include -IC:/Users/User/esp/esp-idf/components/esp_eth/include -IC:/Users/User/esp/esp-idf/components/tcpip_adapter/include -IC:/Users/User/esp/esp-idf/components/app_trace/include -IC:/Users/User/esp/esp-idf/components/mbedtls/port/include -IC:/Users/User/esp/esp-idf/components/mbedtls/mbedtls/include -IC:/Users/User/esp/esp-idf/components/mbedtls/esp_crt_bundle/include -IC:/Users/User/esp/esp-idf/components/app_update/include -IC:/Users/User/esp/esp-idf/components/spi_flash/include -IC:/Users/User/esp/esp-idf/components/bootloader_support/include -IC:/Users/User/esp/esp-idf/components/nvs_flash/include -IC:/Users/User/esp/esp-idf/components/pthread/include -IC:/Users/User/esp/esp-idf/components/esp_gdbstub/include -IC:/Users/User/esp/esp-idf/components/esp_gdbstub/xtensa -IC:/Users/User/esp/esp-idf/components/esp_gdbstub/esp32 -IC:/Users/User/esp/esp-idf/components/wpa_supplicant/include -IC:/Users/User/esp/esp-idf/components/wpa_supplicant/port/include -IC:/Users/User/esp/esp-idf/components/wpa_supplicant/include/esp_supplicant -IC:/Users/User/esp/esp-idf/components/perfmon/include -IC:/Users/User/esp/esp-idf/components/asio/asio/asio/include -IC:/Users/User/esp/esp-idf/components/asio/port/include -IC:/Users/User/esp/esp-idf/components/cbor/port/include -IC:/Users/User/esp/esp-idf/components/unity/include -IC:/Users/User/esp/esp-idf/components/unity/unity/src -IC:/Users/User/esp/esp-idf/components/cmock/CMock/src -IC:/Users/User/esp/esp-idf/components/coap/port/include -IC:/Users/User/esp/esp-idf/components/coap/port/include/coap -IC:/Users/User/esp/esp-idf/components/coap/libcoap/include -IC:/Users/User/esp/esp-idf/components/coap/libcoap/include/coap2 -IC:/Users/User/esp/esp-idf/components/console -IC:/Users/User/esp/esp-idf/components/nghttp/port/include -IC:/Users/User/esp/esp-idf/components/nghttp/nghttp2/lib/includes -IC:/Users/User/esp/esp-idf/components/esp-tls -IC:/Users/User/esp/esp-idf/components/esp-tls/esp-tls-crypto -IC:/Users/User/esp/esp-idf/components/esp_adc_cal/include -IC:/Users/User/esp/esp-idf/components/esp_hid/include -IC:/Users/User/esp/esp-idf/components/tcp_transport/include -IC:/Users/User/esp/esp-idf/components/esp_http_client/include -IC:/Users/User/esp/esp-idf/components/esp_http_server/include -IC:/Users/User/esp/esp-idf/components/esp_https_ota/include -IC:/Users/User/esp/esp-idf/components/protobuf-c/protobuf-c -IC:/Users/User/esp/esp-idf/components/protocomm/include/common -IC:/Users/User/esp/esp-idf/components/protocomm/include/security -IC:/Users/User/esp/esp-idf/components/protocomm/include/transports -IC:/Users/User/esp/esp-idf/components/mdns/include -IC:/Users/User/esp/esp-idf/components/esp_local_ctrl/include -IC:/Users/User/esp/esp-idf/components/sdmmc/include -IC:/Users/User/esp/esp-idf/components/esp_serial_slave_link/include -IC:/Users/User/esp/esp-idf/components/esp_websocket_client/include -IC:/Users/User/esp/esp-idf/components/expat/expat/expat/lib -IC:/Users/User/esp/esp-idf/components/expat/port/include -IC:/Users/User/esp/esp-idf/components/wear_levelling/include -IC:/Users/User/esp/esp-idf/components/fatfs/diskio -IC:/Users/User/esp/esp-idf/components/fatfs/vfs -IC:/Users/User/esp/esp-idf/components/fatfs/src -IC:/Users/User/esp/esp-idf/components/freemodbus/common/include -IC:/Users/User/esp/esp-idf/components/idf_test/include -IC:/Users/User/esp/esp-idf/components/idf_test/include/esp32 -IC:/Users/User/esp/esp-idf/components/jsmn/include -IC:/Users/User/esp/esp-idf/components/json/cJSON -IC:/Users/User/esp/esp-idf/components/libsodium/libsodium/src/libsodium/include -IC:/Users/User/esp/esp-idf/components/libsodium/port_include -IC:/Users/User/esp/esp-idf/components/mqtt/esp-mqtt/include -IC:/Users/User/esp/esp-idf/components/openssl/include -IC:/Users/User/esp/esp-idf/components/spiffs/include -IC:/Users/User/esp/esp-idf/components/ulp/include -IC:/Users/User/esp/esp-idf/components/wifi_provisioning/include -mlongcalls -Wno-frame-address -ffunction-sections -fdata-sections -Wall -Werror=all -Wno-error=unused-function -Wno-error=unused-variable -Wno-error=deprecated-declarations -Wextra -Wno-unused-parameter -Wno-sign-compare -ggdb -Og -fstrict-volatile-bitfields -Wno-error=unused-but-set-variable -std=gnu++11
*/
-fno-exceptions -fno-rtti -D_GNU_SOURCE -DIDF_VER=\"v4.3-dirty\" -DESP_PLATFORM -MD -MT esp-idf/main/CMakeFiles/__idf_main.dir/main.cpp.obj -MF esp-idf\main\CMakeFiles\__idf_main.dir\main.cpp.obj.d -o esp-idf/main/CMakeFiles/__idf_main.dir/main.cpp.obj -c ../main/main.cpp
../main/main.cpp:3:10: fatal error: Metriful_sensor.h: No such file or directory
#include "Metriful_sensor.h"
^~~~~~~~~~~~~~~~~~~
compilation terminated.
ninja: build stopped: subcommand failed.
发布于 2021-07-09 16:35:47
您可能会从CMake用户那里得到很多答案,但是ESP-IDF是不同的,许多答案在这两者之间是不兼容的。
以色列国防军使用建立在CMake之上的组件模型,所以大多数普通的包含命令不会执行任何操作
你想看看idf_component_register
您可能希望将Metriful注册为一个新组件,由于它依赖于Arduino,您可能需要一些额外的步骤。
如果希望保持当前目录结构,请在顶级(顶部为cmake_minimum_required
的CMake )中添加以下行:
集合(EXTRA_COMPONENT_DIRS "Metriful")
否则,在您的folder:
components
的文件夹,并将Metriful放入main
main.cpp your.h components -Metriful Metriful.cpp Metriful.h中。
检查Metriful/CMakeList.txt
的idf_component_register
,如果它不包含它,则用
idf_component_register( SRCS "Metriful/MetrifulC.cpp“"Metriful/MetrifulA.cpp”INCLUDE_DIRS。需要arduino )
注意:您需要手动将Metriful中的每个.cpp
添加到此文件中,与向其添加新文件的相同
main/CMakeList.txt
中向idf_component_register
添加一行需要米特里
注意,Metriful名称是区分大小写的,必须与Metriful的文件夹名匹配。
此时,如果您已经将Arduino添加到您的ESP-以色列国防军项目中,则一切都将正常工作。如果您没有遵循以下说明:https://github.com/espressif/arduino-esp32/blob/master/docs/esp-idf_component.md
也想把这个放出来,Metriful似乎是一个基于Arduino的库。如果您是ESP32新手,直接使用ESP-下手可能会很麻烦,因为您可能会使用很多基于Arduino的库。
Arduino库在ESP-国防军中工作,但是在ESP-下手更新时,经常需要处理一些不兼容的问题。
你有什么特别的理由直接使用ESP-以色列国防军吗?请记住,Platform.IO允许您生成一个编译数据库,这样您就可以使用大多数编码环境,如果这正是您所追求的。
发布于 2021-07-09 13:46:44
静电除尘器-以色列国防军的建设系统是建立在CMake之上.这意味着您可以在文件中使用CMake的所有标准功能。然而,ESP-以色列国防军系统预先定义了许多功能,并对项目的布局做出了许多假设,据说是为了使事情“更容易”。与其阅读CMake文档,不如从阅读和理解文档开始:
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/build-system.html
在我看来,对于子组件,包括CMakeLists.txt
文件的格式,有一个特定的布局。具体来说,将Metriful
移动到名为components
的新目录下,或者将Metriful
添加到根CMakeLists.txt
顶部附近的EXTRA_COMPONENT_DIRS
中。
如果Metriful不是作为esp-国防军组件编写的,这可能无法工作。然而,本文档还描述了如何链接到“纯CMake”组件,这些组件看起来如下(在根CMakeLists.txt
的末尾)。
# Create and import the library targets
add_subdirectory(Metriful)
# Publicly link `foo` to `main` component
target_link_libraries(main PUBLIC metriful)
metriful
参数在target_link_libraries中必须是通过add_library()
在子目录中创建的库的名称。
https://stackoverflow.com/questions/68317455
复制相似问题