1. 编译器
- 查看编译情况
gcc main.c -o main -v # -v查看编译详情
g++ main.c -o main -v # -v查看编译详情
- 添加预处理头文件
- 在PATH中找到可执行文件程序的路径
export PATH =$PATH:$HOME/bin
- gcc找到头文件的路径
C_INCLUDE_PATH=/usr/include/libxml2:/MyLib
export C_INCLUDE_PATH
- g++找到头文件的路径
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libxml2:/MyLib
export CPLUS_INCLUDE_PATH
- 添加汇编动态/静态链接库
- 找到动态链接库的路径
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib
export LD_LIBRARY_PATH
- 找到静态库的路径
LIBRARY_PATH=$LIBRARY_PATH:/MyLib
export LIBRARY_PATH
2. Cmake编译
2.1 查看
locate OpenCVConfig.cmake
2.2 find_package()
用于查找安装库的头文件、链接库等,分为两种查找模式,两种模式均为在指定路径下查找指定类型cmake文件来查找依赖的包,差异为两模式的查找路径不同。
-
MODULE模式下
CMake在CMAKE_MODULE_PATH路径及CMake安装路径 下,通过查找名为Find<PackageName>.cmake
的文件来查找包文件。Module模式只有两个查找路径:CMAKE_MODULE_PATH和CMake安装路径下的Modules目录,其中CMAKE_MODULE_PATH默认为空,可以利用set命令赋值。可通过cmake --help-module-list | grep -E ^Find
命令查看CMake为提供的开发库FindXXX.cmake模块文件。 -
CONFIG模式下
CMake在特定的 cmake变量(如CMAKE_PREFIX_PATH、CMAKE_FRAMEWORK_PATH)指定的路径及系统环境变量PATH指定的路径 下,通过查找名为<PackageName>Config.cmake
或者<lower-case-package-name>-config.cmake
的文件来查找包文件。
查找顺序:
- 名为
<PackageName>_DIR
的CMake变量或环境变量路径,默认为空。这个路径是非根目录路径,需要指定到<PackageName>Config.cmake
或<lower-case-package-name>-config.cmake
文件所在目录才能找到。 - 名为
CMAKE_PREFIX_PATH
、CMAKE_FRAMEWORK_PATH
、CMAKE_APPBUNDLE_PATH
的CMake变量或环境变量路径
根目录,默认都为空。注意如果你电脑中安装了ROS并配置好之后,你在终端执行echo $CMAKE_PREFIX_PATH
会发现ROS会将CMAKE_PREFIX_PATH这个变量设置为ROS中的库的路径,意思是会首先查找ROS安装的库,如果恰好你在ROS中安装了OpenCV库,就会发现首先找到的是ROS中的OpenCV,而不是你自己安装到系统中的OpenCV。 - PATH环境变量路径,默认为系统环境PATH环境变量值。其实这个路径才是Config模式大部分情况下能够查找到安装到系统中各种库的原因。这个路径的查找规则为:遍历PATH环境变量中的各路径,如果该路径如果以bin或sbin结尾,则自动回退到上一级目录得到根目录。
- 查找结果:
查找后,cmake定义<PackageName>_FOUND
、<PackageName>_INCLUDE_DIR
、<PackageName>_LIBRARIES
等变量来保存包的查找状态。
2.3 CMAKE_PREFIX_PATH列表
CMAKE_PREFIX_PATH
是一个分号分隔的路径列表,用来指明软件库安装路径前缀,以供find_package(),find_program(),find_library(),find_file()和find_path()命令搜索使用,这样就方便搜索可执行文件、头文件、库文件及相关配置文件等。
list(APPEND CMAKE_PREFIX_PATH "/home/lzf/libtorch/libtorch") # 安装路径前缀
find_package(Torch REQUIRED)
linux常用`环境变量和c/c++头文件/库路径环境变量
CMake命令:find_package
"轻松搞定CMake"系列之find_package用法详解