cmake find_package
2017-01-18 16:07
1421 查看
这个命令可以自动搜索库的信息,实际就是生成一些cmake变量导入当前的CMakeLists.txt
其依赖于一个事先编译好的findXX.cmake文件,而且一般官方给出了很多,不需要自己编写
此处只是利用这个findXX.cmake节省一些编码工作
比如gflags事先已经编译好,放在c:\gflags目录下,现在一个工程需要引用它,为了避免每次配置gflag,编写一个如下的findGFLAGS.cmake文件
#findXX.cmake就输出三个变量,命名方法不是规定的,但是有约定
set(GFLAGS_FOUND FALSE)
set(GFLAGS_INCLUDE_DIR "")
set(GFLAGS_LIBRARIES "")
#查找头文件路径
FIND_PATH(GFLAG_INC
NAMES
gflags.h
PATHS
c:/gflags/)
#查找库文件
FIND_LIBRARY(GFLAGS_LIB
NAMES
gflags.lib
PATHS
c:/gflags/x64 )
#保存结果到指定变量
list(APPEND GFLAGS_LIBRARIES ${GFLAGS_LIB})
list(APPEND GFLAGS_INCLUDE_DIR ${GFLAG_INC})
#生成变量,确定是查找陈工
IF(GFLAGS_LIBRARIES AND GFLAGS_INCLUDE_DIR)
set(GFLAGS_FOUND true)
ENDIF()
################
#实验中发现问题
#输出变量要用set或list方式赋值,否则无法导出,原因不详
#比如下面的赋值,虽然也有一个GFLAGS_INCLUDE_DIR,但是无法导出
#FIND_PATH(GFLAGS_INCLUDE_DIR
# NAMES
# gflags.h
# PATHS
# c:/gflags/)
#其实对于这种简单场景,直接下面的语句也可以
#set(GFLAGS_INCLUDE_DIR GFLAGS_INCLUDE_DIR)
#但是list方式在导出的库不止一个时很有用
导入时,在CMakeLists.txt中指定模块目录 假设findGFLAGS.cmake放在c:\cmakeFinds中
set(CMAKE_MODULE_PATH c:/cmakeFinds)
find_package(GFLAGS REQUIRED)
if (NOT GFLAGS_FOUND)
message("miss gflags")
endif()
#导入gflags头文件路径
INCLUDE_DIRECTORIES(.
${GFLAGS_INCLUDE_DIR})
#导入gflags库
TARGET_LINK_LIBRARIES(${PROJECT_NAME}
${GFLAGS_LIBRARIES}
)
其依赖于一个事先编译好的findXX.cmake文件,而且一般官方给出了很多,不需要自己编写
此处只是利用这个findXX.cmake节省一些编码工作
比如gflags事先已经编译好,放在c:\gflags目录下,现在一个工程需要引用它,为了避免每次配置gflag,编写一个如下的findGFLAGS.cmake文件
#findXX.cmake就输出三个变量,命名方法不是规定的,但是有约定
set(GFLAGS_FOUND FALSE)
set(GFLAGS_INCLUDE_DIR "")
set(GFLAGS_LIBRARIES "")
#查找头文件路径
FIND_PATH(GFLAG_INC
NAMES
gflags.h
PATHS
c:/gflags/)
#查找库文件
FIND_LIBRARY(GFLAGS_LIB
NAMES
gflags.lib
PATHS
c:/gflags/x64 )
#保存结果到指定变量
list(APPEND GFLAGS_LIBRARIES ${GFLAGS_LIB})
list(APPEND GFLAGS_INCLUDE_DIR ${GFLAG_INC})
#生成变量,确定是查找陈工
IF(GFLAGS_LIBRARIES AND GFLAGS_INCLUDE_DIR)
set(GFLAGS_FOUND true)
ENDIF()
################
#实验中发现问题
#输出变量要用set或list方式赋值,否则无法导出,原因不详
#比如下面的赋值,虽然也有一个GFLAGS_INCLUDE_DIR,但是无法导出
#FIND_PATH(GFLAGS_INCLUDE_DIR
# NAMES
# gflags.h
# PATHS
# c:/gflags/)
#其实对于这种简单场景,直接下面的语句也可以
#set(GFLAGS_INCLUDE_DIR GFLAGS_INCLUDE_DIR)
#但是list方式在导出的库不止一个时很有用
导入时,在CMakeLists.txt中指定模块目录 假设findGFLAGS.cmake放在c:\cmakeFinds中
set(CMAKE_MODULE_PATH c:/cmakeFinds)
find_package(GFLAGS REQUIRED)
if (NOT GFLAGS_FOUND)
message("miss gflags")
endif()
#导入gflags头文件路径
INCLUDE_DIRECTORIES(.
${GFLAGS_INCLUDE_DIR})
#导入gflags库
TARGET_LINK_LIBRARIES(${PROJECT_NAME}
${GFLAGS_LIBRARIES}
)
相关文章推荐
- Cmake中的find_package功能
- CMake find_package for OpenCV
- cmake - FIND_PACKAGE和INCLUDE
- find_package与CMake如何查找链接库详解
- find_package与CMake如何查找链接库详解
- Boost 的编译(交叉)安装 & cmake find_package(Boost)
- Cmake中的find_package功能
- cmake 3.5:find_package(HDF5) 指定HDF5_ROOT无效问题
- CMake中find_package功能演示
- find_package()的查找*.cmake的顺序
- cmake常用指令-1 find_package与CMake如何查找链接库详解
- CMake中find_package功能演示
- CMake和Linux编程:find_package的使用
- cmake cannot find package
- CMake find_package for OpenCV
- cmake:善用find_package()提高效率暨查找JNI支持
- 【学习cmke】find_package与CMake如何查找链接库详解
- cmake:find_package
- 使用cmake find_package找不到opencv
- CMake如何查找链接库---find_package的使用方法