CLion Arduino项目编译报undefined reference错误求助
解决CLion Arduino项目编译"undefined reference"错误的方案
兄弟,你的问题太典型了——CMakeLists.txt里没把Hello.cpp添加到编译列表里!
Arduino IDE会自动扫描sketch目录下的所有.cpp、.h文件,但CLion用的Arduino CMake工具链不会自动做这件事,你得手动把所有需要编译的源文件都明确告诉CMake。
具体修改步骤:
- 在CMakeLists.txt里定义一个变量,把所有要编译的源文件都列进去(包括你的
.ino和.cpp文件) - 把原来指定单个
.ino文件的代码替换成这个变量
修改后的完整CMakeLists.txt如下:
cmake_minimum_required(VERSION 2.8.4) set(CMAKE_TOOLCHAIN_FILE ${CMAKE_SOURCE_DIR}/cmake/ArduinoToolchain.cmake) set(PROJECT_NAME Sample) project(${PROJECT_NAME}) # 把所有需要编译的源文件都放在这里 set(SAMPLE_SOURCES src/Sample.ino src/Hello.cpp ) # 用这个变量替代原来的单文件设置 set(${CMAKE_PROJECT_NAME}_SKETCH ${SAMPLE_SOURCES}) include_directories(include) include_directories(src) set(${CMAKE_PROJECT_NAME}_BOARD mega) set(${CMAKE_PROJECT_NAME}_PORT /dev/ttyACM0) set(mega.build.mcu atmega2560) # set(mega.upload.protocol wiring) set(mega.upload.speed 115200) generate_arduino_firmware(${CMAKE_PROJECT_NAME})
为什么这样能解决问题?
generate_arduino_firmware这个CMake函数只会编译你通过${PROJECT_NAME}_SKETCH指定的文件,你之前只给了Sample.ino,所以Hello.cpp压根没被编译,链接器自然找不到Hello::world()的实现,就报了"undefined reference"错误。
以后再添加新的.cpp文件,记得把它们也加到SAMPLE_SOURCES变量里,不然还会遇到同样的问题。
内容的提问来源于stack exchange,提问作者TX T
相关产品推荐
相关产品推荐

