CMake链接外部库的几种方式

CMake链接外部库的几种方式

######################################################### 链接库开始 ###############################################################

# 1,绝对路径方式
#target_link_libraries(MyApp E:/cppTest/test1/lib/libutils.a)

# 2,相对路径,使用相对路径必须先告诉从哪里链接,在这里调用link_directories()是无效的,只有在生成target之前调用才会有效
# 在这里调用link_directories()是无效的,必须在生成可执行文件之前调用link_directories(),也就是在ADD_EXECUTABLE()之前调用
#link_directories(E:/cppTest/test1/lib)
#target_link_libraries(MyApp utils)
#target_link_libraries(MyApp libutils.a)
#message(STATUS "LINK_DIRECTORIES = ${LINK_DIRECTORIES}")

# 3,使用find_library()  
# find_library ( name1 [path1 path2 ...])
#find_library(LIB_UTILS utils E:/cppTest/test1/lib)
#message(STATUS "LIB_UTILS = ${LIB_UTILS}")
#target_link_libraries(MyApp ${LIB_UTILS})


# 4,使用find_path()find_library()类似,find_path()可以用来找任何文件
# find_path ( name1 [path1 path2 ...])
#find_path(LIB_UTILS_PATH libutils.a E:/cppTest/test1/lib)
#message(STATUS "LIB_UTILS_PATH = ${LIB_UTILS_PATH}")
#target_link_libraries(MyApp ${LIB_UTILS_PATH}/libutils.a)

#5,使用find_package(),这种需要先有模块,要么是系统提供的,要么是自己写的,本例中是自己写的Findutils.cmake
#cmake提供的模块 D:\androidSDK\cmake\3.10.2.4988404\share\cmake-3.10\Modules下面
#将自己写的自己写的Findutils.cmake设置到CMAKE_MODULE_PATH中
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake)
find_package(utils)
if(utils_FOUND)
	# include_directories()作用是设置头文件的搜索路径
	# 官方的解释:Add the given directories to those the compiler uses to search for include files
	# utils_INCLUDE_DIR的值是在Findutils.cmake里面设置的
	include_directories(${utils_INCLUDE_DIR})
	
	#utils_LIBRARY的值是在Findutils.cmake里面设置的
	target_link_libraries(MyApp ${utils_LIBRARY})
endif(utils_FOUND)


######################################################### 链接库结束 ###############################################################

你可能感兴趣的:(cpp,cmake,链接,外部库,CMake)