CMake在静态库中链接静态库

发布时间:2024年01月13日
heheda@linux:~/Linux/multi-v2$ tree
.
├── calc
│   ├── add.cpp
│   ├── CMakeLists.txt
│   ├── div.cpp
│   ├── mult.cpp
│   └── sub.cpp
├── CMakeLists.txt
├── include
│   ├── calc.h
│   └── sort.h
├── lib
│   ├── libcalc.a
│   └── libsort.a
├── sort
│   ├── CMakeLists.txt
│   ├── insert.cpp
│   └── select.cpp
└── test
    ├── CMakeLists.txt
    └── sort.cpp

5 directories, 15 files
heheda@linux:~/Linux/multi-v2$ 

嵌套的CMake-CSDN博客?在这篇博客的基础上,删除test1文件夹,将test2文件夹?修改其文件名为test

一、在静态库中链接静态库?

  • 修改sort.cpp,包含calc.h文件,调用add函数
  • sort.cpp?
#include "sort.h"
#include <iostream>
#include "calc.h"
using namespace std;
int  main()
{
    int number1 = add(1,23);
    cout<<"调用calc库 中的add函数,那么1 + 23 = "<<number1<<endl;
    int a[10] = {8,1,9,7,2,4,5,6,10,3};
    insert(a,10);
    cout<<"插入排序结果:";
    print(a,10);
    select(a, 10);
    cout << "选择排序结果: ";
    print1(a, 10);
}

  • calc文件夹中的CMakeLists.txt(不做改动)
cmake_minimum_required(VERSION 3.10)
project(calc)

# 搜索源文件
aux_source_directory(./ SRC)
include_directories(${HEADPATH}) # 头文件路径 HEADPATH

set(LIBRARY_OUTPUT_PATH ${LIBPATH}) # 静态库生成的路径 LIBPATH
add_library(${CALCLIB} STATIC ${SRC}) # 生成静态库
  • sort文件夹中的CMakeLists.txt(改动:在静态库中链接静态库)
cmake_minimum_required(VERSION 3.10)
project(sort)

# 搜索源文件
aux_source_directory(./ SRC)
include_directories(${HEADPATH}) # 头文件路径 HEADPATH

# 包含静态库路径 (在静态库中链接静态库?)
link_directories(${LIBPATH})
# 链接静态库, calc为静态库的名字
link_libraries(${CALCLIB})

set(LIBRARY_OUTPUT_PATH ${LIBPATH}) # 库生成的路径 LIBPATH
add_library(${SORTLIB} STATIC  ${SRC}) # 生成静态库
  • ?test文件夹中的CMakeLists.txt(不做改动)
cmake_minimum_required(VERSION 3.10)
project(test2)

aux_source_directory(./ SRC)
include_directories(${HEADPATH})

set(EXECUTABLE_OUTPUT_PATH ${EXECPATH})

# 包含静态库路径
link_directories(${LIBPATH})
# 链接静态库, sort为静态库的名字
link_libraries(${SORTLIB}) 
add_executable(${APPNAME2} ${SRC}) 
  • 项目根目录中的CMakeLists.txt(改动)?
cmake_minimum_required(VERSION 3.10)
project(test)
# 定义变量

# 库生成的路径
set(LIBPATH ${PROJECT_SOURCE_DIR}/lib)

# 可执行程序的存储目录(测试程序生成的路径)
set(EXECPATH ${PROJECT_SOURCE_DIR}/bin)

# 头文件路径
set(HEADPATH ${PROJECT_SOURCE_DIR}/include)

# 库文件的名字
set(CALCLIB calc)
set(SORTLIB sort)

# 可执行程序的名字
set(APPNAME1 app1)
set(APPNAME2 app2)

# 给当前节点添加子目录
add_subdirectory(calc)
add_subdirectory(sort)
add_subdirectory(test)

文章来源:https://blog.csdn.net/weixin_41987016/article/details/135574725
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。