CMake使用外部链接库

在Linux下不想每次写Makefile自然就想到替代工具了。由于Clion支持的是cmake,所以我也就粉了它。

C/C++工程使用外部链接库时需要指定头文件和库的所在目录(-I -L),同时编译选项加上对应的库名,对应在cmake中CMakeLists.txt文件即使用如下的三个命令

1
2
3
include_directories: -I
link_directories: -L
target_link_libraries: -lXXX

举个例子
编译main.cc时需要使用neno库,库和头文件分别在目录inclib之下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|-- Ne10
| |-- CMakeLists.txt
| |-- GNUlinux_config.cmake
| |-- LICENSE
| |-- README.md
| |-- android
| |-- build
| |-- cmake
| |-- common
| |-- contributing.md
| |-- doc
| |-- inc
| |-- ios
| |-- lib
| |-- modules
| |-- samples
| |-- test
| |-- tools
|-- bench
| |-- CMakeLists.txt
| |-- main.cc

g++ -I ../Ne10/inc/ -L ../Ne10/lib/ main.cc -o demo -lNE10对应的 cmake文件如下所示:

1
2
3
4
5
6
7
8
9
10
cmake_minimum_required(VERSION 2.6)

project(NENO_benchmark)

set(NENO_PREFIX ~/Ne10)
include_directories(${NENO_PREFIX}/inc)
link_directories(${NENO_PREFIX}/lib)

add_executable(demo main.cc)
target_link_libraries(demo libNE10.a)

validate ok~

补充一发,KALDI中的option_parser测试

1
2
3
4
5
6
7
8
9
10
11
12
cmake_minimum_required(VERSION 3.5)

set(KALDI_DIR ~/Document/git/kaldi)
set(TARGET test-options-parse)
set(SRC test-options.cc)
include_directories(${KALDI_DIR}/src ${KALDI_DIR}/tools/openfst/include)
link_directories(${KALDI_DIR}/src/lib)

add_definitions(-O3 -g -std=c++11)

add_executable(${TARGET} ${SRC})
target_link_libraries(${TARGET} kaldi-util kaldi-base)