上一篇我们生成了动态库和静态库,这一篇我们要将他们使用起来。
目录结构:

将上一篇生成的libhello.so放到dynamic目录中,libhello_static.a放到static目录中,build空目录是将来生成文件存放的目录。
一、使用动态库
hello.h文件中:
#ifndef HELLO_H
#define HELLO_H
#include <iostream>
void HelloFunc();
#endif
main.cpp
#include "hello.h"
int main()
{
HelloFunc();
return 0;
}
CMakeLists.txt
cmake_minimum_required (VERSION 2.6)
project(hello_cmake)
#//头文件目录
include_directories(${PROJECT_SOURCE_DIR}/include)
#//生成可执行文件
add_executable(hello_cmake main.cpp)
#//链接库到可执行文件
target_link_libraries(hello_cmake ${PROJECT_SOURCE_DIR}/dynamic/libhello.so)
或者写成:
cmake_minimum_required (VERSION 2.6)
project(hello_cmake)
#//头文件目录
include_directories(${PROJECT_SOURCE_DIR}/include)
#添加动态库目录
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/dynamic)
#//生成可执行文件
add_executable(hello_cmake main.cpp)
#//链接库到可执行文件
target_link_libraries(hello_cmake libhello.so)
target_link_libraries(hello_cmake ${PROJECT_SOURCE_DIR}/dynamic/libhello.so)
等于
#添加动态库目录
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/dynamic)
#//链接库到可执行文件
target_link_libraries(hello_cmake libhello.so)
说明:
target_link_libraries的第一个参数是自己设置的项目名——project(hello_cmake)
TARGET_LINK_LIBRARIES
语法:
target_link_libraries(<target> [item1 [item2 [...]]]
[[debug|optimized|general] <item>] ...)
以下三种写法是相同的:
target_link_libraries(myProject libhello.so) #这些库名写法都可以。
target_link_libraries(myProject hello)
target_link_libraries(myProject -lhello)

命令:
ls -l

二、使用静态库
只需要在上面的例子中,修改CMakeLists.txt文件:
cmake_minimum_required (VERSION 2.6)
project(hello_cmake)
#//头文件目录
include_directories(${PROJECT_SOURCE_DIR}/include)
#添加静态库目录
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/static)
#//生成可执行文件
add_executable(hello_cmake main.cpp)
#//链接库到可执行文件
target_link_libraries(hello_cmake libhello_static.a)
编译步骤不变,看看我们生成的文件:

静态库版本生成的hello_cmake体积是9160,动态库版本生成的hello_cmake体积大小是8612
把static目录中的libhello_static.a名字改成libhello.a

修改CMakeLists.txt中的最后一行,三种写法都是可以的。(不信的话,你可以用ls -l 查看生成的hello_cmake的体积大小了)
cmake_minimum_required (VERSION 2.6)
project(hello_cmake)
#//头文件目录
include_directories(${PROJECT_SOURCE_DIR}/include)
#添加静态库目录
LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/static)
#//生成可执行文件
add_executable(hello_cmake main.cpp)
#//链接库到可执行文件,以下三种写法都是可以的
#target_link_libraries(hello_cmake libhello.a)
#target_link_libraries(hello_cmake hello.a)
target_link_libraries(hello_cmake hello)
参考:
CMake 添加需要链接的库文件目录LINK_DIRECTORIES
本文详细介绍了如何在CMake中链接和使用动态库与静态库。通过示例展示了CMakeLists.txt文件的配置,包括添加库目录、生成可执行文件以及链接库的步骤。动态库和静态库的使用导致生成的可执行文件体积不同,静态库版本的hello_cmake体积较大。同时,文中提到静态库和动态库链接的不同写法,以及如何在CMake中引用静态库。
695

被折叠的 条评论
为什么被折叠?



