以前在Mac下写C++用Xcode,写服务器代码用vim+scons编译,这段时间用CLion,发现IDE是真香。CLion使用cmake编译工具,编译工程依赖CMakelists.txt文件。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
cmake_minimum_required(VERSION 3.15)
project(helloWorld)

set(CMAKE_CXX_STANDARD 11)

# ffmpeg library
# pkg-config --libs --cflag libavformat libavutil
set(ENV{PKG_CONFIG_PATH} /usr/local/Cellar/ffmpeg/4.2.2_2/lib/pkgconfig)
find_package(PkgConfig)
pkg_search_module(AVFORMAT REQUIRED libavformat)
pkg_search_module(AVUTIL REQUIRED libavutil)
# just print library messages
message(STATUS ${AVFORMAT_LIBRARIES})
message(STATUS ${AVFORMAT_INCLUDE_DIRS})
# include & link directories
include_directories(${AVFORMAT_INCLUDE_DIRS} ${AVUTIL_INCLUDE_DIRS})
link_directories(${AVFORMAT_LIBRARY_DIRS} ${AVUTIL_LIBRARY_DIRS})
# add source files
add_executable(metadata main.cpp)
# link target
target_link_libraries(metadata ${AVFORMAT_LIBRARIES} ${AVUTIL_LIBRARIES})

上面这个例子是生成metadata二进制的CMakelists例子

  1. 首先设置 PKG_CONFIG_PATH 环境变量,也就是 libavformat.pc 所在的路径
  2. find_package(PkgConfig) 查找 pkg-config 工具
  3. 查找 libavformat, libavutil, include_directories用于提供头文件路径,即-I/path/include,link_directories用于提供链接的路径,即 -L/path/lib
  4. 添加二进制源文件
  5. 链接目标,target_link_libraries 将目录与lib链接起来,即 -lavformat -lavutl