1.动态库链接
(1)链接动态库的第一种写法
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../ThirdPartyLib)
add_executable(${PROJECT_NAME}
${ALL_SOURCES}
${ALL_INCLUDES}
)
target_link_libraries(${PROJECT_NAME}
srtp2
# -lsrtp2 #前面也可以加-l
)
这种写法要求link_directories、add_executable、target_link_libraries的顺序必须是这样的先后关系
(2) 链接动态库的第2种写法
find_library(srtp2Lib srtp2 HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdPartyLib)
add_executable(${PROJECT_NAME}
${ALL_SOURCES}
${ALL_INCLUDES}
)
target_link_libraries(${PROJECT_NAME}
${srtp2Lib}
)
这种写法find_library和add_executable是没有先后顺序的,而且在cmake的编译阶段就可以检查出是否能在对应的目录找到srtp2的库,推荐使用这种方式
2.静态库链接
(1)下面是链接静态库的第一种写法
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../ThirdPartyLib)
add_executable(${PROJECT_NAME}
${ALL_SOURCES}
${ALL_INCLUDES}
)
target_link_libraries(${PROJECT_NAME}
srtp2
# -lsrtp2 #前面也可以加-l
# #可以明确指定静态库
)
和链接动态库的写法是一模一样的。以linux系统下为例子,target_link_libraries里面链接的库,实际上会自动查找或 文件,但是若.so文件和.a文件在指定同时存在,那么.so文件优先,但是若明确指定为 ,那么便链接的是静态库
(2)链接静态库的第2种写法
find_library(srtp2Lib srtp2 HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdPartyLib)
# find_library(srtp2Lib HINTS ${CMAKE_CURRENT_SOURCE_DIR}/../ThirdPartyLib)
add_executable(${PROJECT_NAME}
${ALL_SOURCES}
${ALL_INCLUDES}
)
target_link_libraries(${PROJECT_NAME}
${srtp2Lib}
)
和链接动态库的第2种写法一模一样。同样find_library查找时,.so文件优先,但是也是可以明确指定查找文件
(3) 链接静态库的第3种写法
link_libraries(${CMAKE_CURRENT_SOURCE_DIR}/lib/)
add_executable(${PROJECT_NAME}
${ALL_SOURCES}
${ALL_INCLUDES}
)
这种方法是采用link_libraries指令链接静态库,link_libraries必须在add_executable指令之前调用,link_libraries是比较古老的指令了,不推荐这种写法