CMake 학습(4): 라이브러리 파일 만들기 - 정적 라이브러리/동적 라이브러리

때때로 우리가 작성하는 소스 코드는 실행 가능한 프로그램으로 컴파일할 필요가 없지만 静态库或动态库타사 사용을 위해 일부를 생성해야 합니다.이 두 가지 유형의 라이브러리 파일을 cmake에서 생성하는 방법을 설명하겠습니다.

1 정적 라이브러리 만들기

cmake에서 make를 하려면 静态库다음과 같은 명령을 사용해야 합니다.

add_library(库名称 STATIC 源文件1 [源文件2] ...) 

add_library生成库文件, 라이브러리 파일을 추가하는 대신

  • 그것이 안에 있든 아래Linux 에 있든, 또는 그 이름은 주로 세 부분으로 나뉩니다: + + , Linux의 동적 라이브러리인 경우 다음 , 정적 라이브러리인 경우 Windows 시스템인 경우 정적 라이브러리의 해당 접미사는 입니다 . 시스템의 접미사는 입니다 .Windows动态库静态库lib库名字后缀.sowindows.dll.libLinux.a
  • 库名称: lib와 접미사를 제외한 라이브러리 이름으로, 정적 라이브러리를 생성하려면 로 지정하고, STATIC동적 라이브러리라면 로 지정하고, SHARED뒤에 모든 소스 파일을 붙여서 라이브러리 파일을 생성합니다.

아래에 디렉토리가 있습니다. src소스 파일을 디렉토리에 넣은 编译成静态库다음 다음을 사용해야 합니다.

.
├── build
├── CMakeLists.txt
├── include           # 头文件目录
│   └── head.h
├── main.cpp          # 用于测试的源文件
└── src               # 源文件目录
    ├── add.cpp
    ├── div.cpp
    ├── mult.cpp
    └── sub.cpp

위의 디렉토리 구조에 따라 CMakeLists.txt파일은 다음과 같이 작성할 수 있습니다.

cmake_minimum_required(VERSION 3.0)
project(CALC)
include_directories(${
    
    PROJECT_SOURCE_DIR}/include)
file(GLOB SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
add_library(calc STATIC ${
    
    SRC_LIST})

그러면 결국 해당 정적 라이브러리 파일이 생성됩니다 libcalc.a.

2 동적 라이브러리 만들기

cmake에서 make를 하려면 动态库다음과 같은 명령을 사용해야 합니다.

add_library(库名称 SHARED 源文件1 [源文件2] ...) 
  • 에서 Linux동적 라이브러리 이름은 세 부분으로 나뉩니다. lib+ 库名字 +.so여기서만 지정하면 되고 库的名字다른 두 부분은 파일이 생성될 때 자동으로 채워집니다.

  • Windows에서는 라이브러리 이름의 형식이 Linux와 다르지만 이름만 지정하면 됩니다.

위의 디렉토리 구조에 따라 CMakeLists.txt 파일은 .

cmake_minimum_required(VERSION 3.0)
project(CALC)
include_directories(${
    
    PROJECT_SOURCE_DIR}/include)
file(GLOB SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
add_library(calc SHARED ${
    
    SRC_LIST})

이는 결국 해당 동적 라이브러리 파일 libcalc.so를 생성합니다.

3 라이브러리 파일 사용

两部分라이브러리 파일을 제3자에게 공개할 때 데이터를 공개해야 합니다 库文件 + 头文件. 동적 라이브러리든 정적 라이브러리든 본질은 동일하기 때문에 源代码이러한 소스 코드는 二进制(컴퓨터의 경우 소스인지 여부) 바이너리 또는 텍스트 형식의 파일)은 모두 바이너리로 처리되므로 头文件소스 파일의 선언이 모두 헤더 파일에 정의되어 있으므로 바이너리 소스 파일도 필요합니다 .

4. 출력 라이브러리 파일의 경로 지정

방법 1 - 동적 라이브러리용

생성된 라이브러리 파일과 실행 프로그램에 대해 출력 경로를 지정할 수 있습니다. Linux에서 생성된 动态库기본값이 执行权限있으므로 生成可执行程序다음과 같은 방법으로 생성되는 디렉터리를 지정할 수 있습니다.

cmake_minimum_required(VERSION 3.0)
project(CALC)
include_directories(${
    
    PROJECT_SOURCE_DIR}/include)
file(GLOB SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
# 设置动态库生成路径
set(EXECUTABLE_OUTPUT_PATH ${
    
    PROJECT_SOURCE_DIR}/lib)
add_library(calc SHARED ${
    
    SRC_LIST})
  • 이 방법은 실제로 set 명령을 통해 EXECUTABLE_OUTPUT_PATH매크로 이 경로가 실행 파일에 의해 생성된 경로입니다.
  • EXECUTABLE_OUTPUT_PATH동적 라이브러리와 실행 파일 모두 실행 권한이 있으므로 실행 파일의 출력 경로를 지정하므로 EXECUTABLE_OUTPUT_PATH는 동적 라이브러리에도 적용 가능합니다. 하지만 동적 라이브러리의 출력은 그다지 직관적이지 않기 때문에 라이브러리 파일의 출력 경로를 지정할 때LIBRARY_OUTPUT_PATH

방법 2 - 둘 다 적용

Linux에서 생성되므로 静态库默认不具有可执行权限정적 라이브러리에서 생성된 경로를 지정할 때 EXECUTABLE_OUTPUT_PATH매크로를 LIBRARY_OUTPUT_PATH, 이 매크로는 정적 라이브러리 파일과 동적 라이브러리 파일 모두에 적용 가능합니다.

cmake_minimum_required(VERSION 3.0)
project(CALC)
include_directories(${
    
    PROJECT_SOURCE_DIR}/include)
file(GLOB SRC_LIST "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
# 设置动态库/静态库生成路径
set(LIBRARY_OUTPUT_PATH ${
    
    PROJECT_SOURCE_DIR}/lib)
# 生成动态库
#add_library(calc SHARED ${
      
      SRC_LIST})
# 生成静态库
add_library(calc STATIC ${
    
    SRC_LIST})

참고

저자: Su Bingyu
링크: https://subingwen.cn/cmake/CMake-primer/

추천

출처blog.csdn.net/weixin_38346042/article/details/131057947