赞
踩
CLion本身对CMake有着强大的支持,这一切支持的背后,都依赖着符号的索引以及头文件的查找。对于交叉编译的开发情景,CLion的默认设置显然不能满足需求,一旦配置不到位,那么就会面临"iostream is not found","vector is not found"等标准C++头文件找不到的问题。本文介绍了如何优雅的解决此类问题的方法。
如果喜欢或有不足之处,欢迎评论。
编辑环境:CLion for Windows
构建环境:用于构建IMX8Mmini开发板的Docker容器
在Windows桌面环境通过Clion强大的远程开发调试功能,连接到docker的编译环境下。
在完成基本的CLion工具链配置之后,“Hello world”交叉编译通过
#include <iostream>
#include <map>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
标准库头文件iostream和map下有红色波浪线,并且无法进入头文件查看,提示iostream is not found
在CMakeLists.txt中进行人如下定义
CMAKE_SYSROOT
变量,指向嵌入式系统根目录CMAKE_FIND_ROOT_PATH
变量,并包含嵌入式系统根目录路径添加完成后的CMakeLists.txt内容如下
# cmake_minimum_required(VERSION <specify CMake version here>) cmake_minimum_required(VERSION 3.10) set(SYSROOT_PATH /opt/myir-imx-xwayland/4.14-sumo/sysroots/aarch64-poky-linux) set(CMAKE_SYSROOT "${SYSROOT_PATH}") set(CMAKE_FIND_ROOT_PATH "${SYSROOT_PATH}" "${CMAKE_PREFIX_PATH}" "${TOOLCHAIN_PATH}") # search for programs in the build host directories set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) # for libraries and headers in the target directories set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) project(demo LANGUAGES "CXX" "C") set(CMAKE_CXX_STANDARD 14) add_executable(demo main.cpp)
要想CLion IDE可以正常解析,则符号所在的头文件目录要出现在工程窗口中->External Libraries->Header Search Paths中,如下图所示
而之前编译可以通过但是CLion无法解析,是因为之前只设置了CMAKE_SYSROOT
变量,而未设置CMAKE_FIND_ROOT_PATH
变量。
CMAKE_SYSROOT
:作用于gnu工具链,添加--sysroot
编译选项
CMAKE_FIND_ROOT_PATH
变量,影响CLion头文件路径搜索,直至影响到IDE是否能正常解析符号。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。