上一篇我们生成了动态库和静态库,这一篇我们要将他们使用起来。
目录结构:
将上一篇生成的libhello.so放到dynamic目录中,libhello_static.a放到static目录中,build空目录是将来生成文件存放的目录。
hello.h文件中:
#ifndef HELLO_H
#define HELLO_H
#include
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 设置要链接的库文件的名称TARGET_LINK_LIBRARIES
target_link_libraries
linux下生成动态链接库并使用(使用cmake)
如何在cmake中引用静态库(.a)
Linux下CMake生成和调用动态库