cmake 引用子目录的库

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cmake 引用子目录的库相关的知识,希望对你有一定的参考价值。

1. 目录结构

app
|——main.c
|——libso/
|——hello.c
|——hello.h
|——CMakeLists.txt
|——CmakeLists.txt
CmakeLists.txt

2. CMakeLists.txt

2.1 app文件夹的CMakeLists.txt

project(hello_jelly)
include_directories($PROJECT_SOURCE_DIR/../libso)
 
set(APP_SRC main.c)
add_executable($PROJECT_NAME main.c)
target_link_libraries($PROJECT_NAME helloso)
 
message($PROJECT_SOURCE_DIR)

2.2 libso文件夹的CMakeLists.tx

project(helloso)
 
set(LIB_SRC hello.c)
add_library($PROJECT_NAME SHARED $LIB_SRC)

2.3 外面那个和app在同一目录下的CMakeLists.txt

cmake_minimum_required (VERSION 3.2)
project(jelly_cmake)
 
add_subdirectory(./app)
add_subdirectory(./libso)

其表示我们要到./app和./libso文件夹下面去寻找Cmake文件然后进行编译

3. install

app目录修改CMakeLists.txt

install(TARGETS $PROJECT_NAME DESTINATION bin)

libso目录修改的CMakeLists.txt如下:只是在之前的基础上加了最后install一行

install(TARGETS $PROJECT_NAME DESTINATION ../lib)

3.1 install(TARGETS $PROJECT_NAME DESTINATION bin)

安装TARGERS hello_jelly这个可执行文件到$CMAKE_INSTALL_PREFIX/bin目录下面

  • bin前面不能有/,否则会是绝对路径,它不再会去获取$CMAKE_INSTALL_PREFIX路径,
eg.  我的$CMAKE_INSTALL_PREFIX路径是/usr/local路径

可执行文件安装的路径是:/usr/local/bin/
so库文件的安装路径是:/usr/local/../lib/

以上是关于cmake 引用子目录的库的主要内容,如果未能解决你的问题,请参考以下文章

从 CMake 中使用的库继承包含目录

如何知道 CMake 找到的库版本?

CMake 更改强制 DESTINATION 目录名称(安装目标)

如何在 CMake 项目中包含外部库

用于具有单个 .h 文件的库的 Cmake

CMake post-build-event:复制已编译的库