【find_package】基本调用形式
find_package(<PackageName> [version] [EXACT] [QUIET] [MODULE][REQUIRED] [[COMPONENTS] [components...]][OPTIONAL_COMPONENTS components...][NO_POLICY_SCOPE])
例如
find_package(fastcdr REQUIRED)
find_package(fastrtps REQUIRED)
find_package(asio QUIET)
find_package(CUDA)
include_directories(${CUDA_INCLUDE_DIRS})
功能
用于查找并载入一个外部包的设置命令
[QUIET] 选项
查找是否成功可以通过< PackageName >_FOUND变量的值得到。成功查找到包后,我们就可以导入包中的目标。
使用QUIET选项可以不显示查询过程中产生的信息,比如如果没有使用REQUIRED选项,即使包没有被找到,也不会显示任何信息。
[REQUIRED] 选项
使用REQUIRED选项后,如果包没有被找到,就会产生一个错误信息,中断处理。
例如:
find_package(GTest REQUIRED)
find_package(PCL REQUIRED)
find_package(Doxygen REQUIRED)
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})find_package(yaml-cpp REQUIRED)
include_directories(${YAML_INCLUDE_DIRS})find_package(gflags REQUIRED)
include_directories(${GFLAGS_INCLUDE_DIRS})find_package(Ceres REQUIRED)
include_directories(${CERES_INCLUDE_DIRS})
[COMPONENTS] 选项
对于必须的包组件可以在 COMPONENTS 选项后列出(如果使用了REQUIRED选项,也可以在REQUIRED选项后列出)。
对于可选的包组件可以在 OPTIONAL_COMPONENTS 选项后列出。包自身定义了可用的包组件和包被认为找到的条件。
例 1
find_package(catkin REQUIRED COMPONENTS roscpp cv_bridge pcl_ros std_msgs message_generation)
include_directories(${catkin_INCLUDE_DIRS})
include_directories(${CMAKE/BINARY_DIR}/devel/include)
例 2
find_package(Boost REQUIRED COMPONENTS iostreams)
include_directories(${Boost_INCLUDE_DIRS})
find_package(Boost REQUIRED COMPONENTS filesystem system iostreams thread)
include_directories(${Boost_INCLUDE_DIRS})
find_package(Boost REQUIRED COMPONENTS data_time system thread serialization)
[version] 选项
用于指定要查找的包的版本(版本格式为major[.minor[.patch[.tweak]]])。
[EXACT] 选项
查找的包的版本需要和指定的版本准确匹配。如果没有使用[version]选项,没有给出需要的包组件列表,就会使用外部调用的相应参数(包括[version]的EXACT选项)。
例如:
find_package(Protobuf 3 EXACT REQUIRED)
include_directories(${Protobuf_INCLUDE_DIRS})
参考链接:https://blog.csdn.net/challenglistic/article/details/130138476
参考链接:https://zhuanlan.zhihu.com/p/60479441