【发布时间】:2015-08-06 02:26:51
【问题描述】:
对于我的 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 lib?有没有更简单的方法,而不是在创建之前删除我的构建文件夹中的所有内容?就像它一次编译所有“静态”文件,每次只添加更改文件(=main.cpp)。
此外,我想在任何地方执行我的程序,例如
sudo minimu
而不是进入“构建”目录并输入
sudo ./minimu
如果你们能帮助我,谢谢!
对不起,如果我的英语不是那么好:)
祝你有美好的一天。
【问题讨论】:
标签: c++ cmake raspberry-pi