gpt4 book ai didi

c++ - 将 wiringPi 库添加到 RaspberryPi 上的 cmake

转载 作者:行者123 更新时间:2023-11-30 00:48:52 27 4
gpt4 key购买 nike

对于我的 C++ 项目,我想创建一个 cmake 文件来编译并将所有内容链接在一起。
到目前为止,这是我的目录结构:

"quadro/minimu9-ahrs" alias home
|-build
|-include
|-src

在我的主目录中,我有这个“CMakeLists.txt”文件:

cmake_minimum_required (VERSION 2.6)
project(minimu)

set(HEADER_FILES $("include/*.h")
include_directories(include)
file(GLOB SOURCES "src/*.cpp")

add_executable(minimu ${SOURCES})
add_definitions(-std=c++0x -lwiringPi -lpthread)

#install(TARGETS minimu DESTINATION /usr/lib)

在我的“src”目录中,我得到了所有的 .cpp 文件,在“include”中,我得到了我所有的标题。当我编译时,我进入我的构建目录,删除那里存在的所有内容(来自以前的构建)并键入

cmake ..
make

我现在的问题是,我在 src 中的 main.cpp 使用“#include wiringPi.h”,但是当我创建项目时,它会给我以下错误:

pi@raspberrypi ~/quadro/minimu9-ahrs/build $ make
Scanning dependencies of target minimu
[ 20%] Building CXX object CMakeFiles/minimu.dir/src/L3G.cpp.o
[ 40%] Building CXX object CMakeFiles/minimu.dir/src/LSM303.cpp.o
[ 60%] Building CXX object CMakeFiles/minimu.dir/src/main.cpp.o
[ 80%] Building CXX object CMakeFiles/minimu.dir/src/I2CBus.cpp.o
[100%] Building CXX object CMakeFiles/minimu.dir/src/MinIMU9.cpp.o
Linking CXX executable minimu
CMakeFiles/minimu.dir/src/main.cpp.o: In function `frequency_thread(void*)':
main.cpp:(.text+0x1c): undefined reference to `digitalWrite'
main.cpp:(.text+0x38): undefined reference to `digitalWrite'
CMakeFiles/minimu.dir/src/main.cpp.o: In function `signalHandler(int)':
main.cpp:(.text+0xd4): undefined reference to `digitalWrite'
main.cpp:(.text+0xe8): undefined reference to `digitalWrite'
CMakeFiles/minimu.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0x14c): undefined reference to `wiringPiSetup'
main.cpp:(.text+0x184): undefined reference to `pinMode'
main.cpp:(.text+0x1e8): undefined reference to `pthread_create'
main.cpp:(.text+0x29c): undefined reference to `pthread_join'
collect2: ld returned 1 exit status
CMakeFiles/minimu.dir/build.make:185: recipe for target 'minimu' failed
make[2]: *** [minimu] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/minimu.dir/all' failed
make[1]: *** [CMakeFiles/minimu.dir/all] Error 2
Makefile:72: recipe for target 'all' failed
make: *** [all] Error 2

那么我如何告诉 cmake 中的编译器在哪里找到以及如何使用 wiringPi 库?有没有更简单的方法,而不是在 cmaking 之前删除我的构建文件夹中的所有内容?就像它一次编译所有'静态'文件,并且每次只添加变化的文件(= main.cpp)。

此外,我想在任何地方执行我的程序

sudo minimu

而不是进入“构建”目录并输入

sudo ./minimu

如果你们能帮助我,谢谢你们!
对不起,如果我的英语不是那么好:)
祝你有美好的一天。

最佳答案

感谢 github 上的塞巴斯蒂安,我今天才弄明白这一点。

假设您安装了 wiringPi,最简单的方法是使用以下内容制作 FindWiringPi.cmake:

find_library(WIRINGPI_LIBRARIES NAMES wiringPi)
find_path(WIRINGPI_INCLUDE_DIRS NAMES wiringPi.h)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(wiringPi DEFAULT_MSG WIRINGPI_LIBRARIES WIRINGPI_INCLUDE_DIRS)

然后将其放入 cmake 查找其模块的文件夹中。对于 Ubuntu,它是/usr/share/cmake-2.x/Modules。 pi 的路径也基本相同。

然后在您的 CMakeLists.txt 文件中使用:

# Locate libraries and headers
find_package(WiringPi REQUIRED)
find_package(Threads REQUIRED)

# Include headers
include_directories(${WIRINGPI_INCLUDE_DIRS})

# Link against libraries
target_link_libraries(<yourProjectName> ${WIRINGPI_LIBRARIES})
target_link_libraries(<yourProjectName> ${CMAKE_THREAD_LIBS_INIT})

pthread 模块是一个库存包,应该已经在您的系统上了。然后导航到您的文件夹并执行 cmake ./ 然后 make。如果这第一次不起作用,请使用 rm CMakeCache.txt 删除您的 CMakeCache.txt,然后重试。确保你删除的是缓存而不是列表!!

关于c++ - 将 wiringPi 库添加到 RaspberryPi 上的 cmake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30424236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com