构建指南

链接静态库

方案一:指定动态库文件并连接

优点:可以控制链接的静态库,从而排除不必要的静态库链接,减少生成文件的大小。

缺点:若需要链接的库文件较多,会导致编写链接的过程异常繁琐。

# 添加静态库目录
link_directories("D:/Workspace/cpp/ffmpeg/build/bin")


add_executable (main main.cpp main.h)
# 链接指定静态库文件到可执行文件(忽略文件名扩展)
target_link_libraries(main swscale swresample avutil avformat avfilter avdevice avcodec)

亦可以不使用link_directories指定静态库目录,而直接使用target_link_libraries进行处理。

add_executable (main main.cpp main.h)
# 链接指定静态库文件到可执行文件(忽略文件名扩展)
target_link_libraries(main "D:/Workspace/cpp/ffmpeg/build/bin/swscale")

方案二:搜索指定目录的动态库文件并链接

优点:静态库文件较多时,可以避免静态库文件导入的繁琐。(正好与方案一相反)

缺点:容易导入不需要的静态库文件。(正好与方案一相反)

# 将源代码添加到此项目的可执行文件。
add_executable (main main.cpp main.h)

FILE(GLOB_RECURSE FFMPEG_STATIC_LIB "D:/Workspace/cpp/ffmpeg/build/bin/*.lib")
foreach(path ${FFMPEG_STATIC_LIB})
	# 会链接所有目标
	# link_libraries(${path})
	# 仅链接指定目标
	string(REGEX MATCH "[^/]*.[lib]$" file_ext ${path})
	string(REGEX MATCH "^[^.]*" file ${file_ext})
	message(${path}, ${file}, ${file_ext})
	add_library(${file} SHARED IMPORTED GLOBAL)
	set_property(TARGET ${file} PROPERTY  IMPORTED_IMPLIB ${path})
	target_link_libraries(main ${path})
endforeach()

参考资料