cmake模板—生成自己的动态库和静态库

cmake模板—生成自己的动态库和静态库

目录结构

进入build,执行cmake …;make;make install(头文件会被放在/usr/local/include;可执行文件会被放在/usr/local/bin;库文件会被放在/usr/local/lib)

├── bin
├── build
├── CMakeLists.txt
├── include
│   ├── bye.h
│   └── hello.h
├── lib
│   ├── bye.cpp
│   ├── CMakeLists.txt
│   └── hello.cpp
├── README.md
└── src
    ├── CMakeLists.txt
    └── main.cpp

顶层CMakeLists.txt

#声明要求的最小版本
cmake_minimum_required(VERSION 3.10.2)
#项目名称
PROJECT(hello)

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -Wall -O2")

#添加参与编译的子目录 我理解为:添加下一个CMakeLists.txt
#对于src适合使用AUX_SOURCE_DIRECTORY
ADD_SUBDIRECTORY(lib)

#添加头文件的查找目录 && 在编译参数"-l" ,指定搜索头文件的路径
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)

ADD_EXECUTABLE(main ${EXE_SRC})

#TARGET_LINK_LIBRARIES 用来链接 -l后的文件依赖
TARGET_LINK_LIBRARIES(main hello bye)

#EXECUTABLE_OUTPUT_PATH && LIBRARY_OUTPUT_PATH用来指定二进制文件位置和库文件路径,这里不包括中间文件
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

# 安装main是可执行文件
INSTALL(TARGETS main RUNTIME DESTINATION bin)

### Testing 指令:make test#
ENABLE_TESTING()
ADD_TEST(NAME SimpleTest COMMAND main)

#增加客制化命令
ADD_CUSTOM_TARGET(run
	COMMAND main
	)

src里的CMakeLists.txt

lib里的CMakeLists.txt

库的源文件放在了lib目录下,生成的链接库也会放在lib,你也可以指定他们的位置

INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/include)

AUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/lib LIB_SRCS)

LINK_DIRECTORIES(/usr/local/lib)

#生成动态库  静态库则 STATIC
ADD_LIBRARY(hello SHARED ${LIB_SRCS})
#静态库不能写为hello,否则会被动态库覆盖
ADD_LIBRARY(hello_static STATIC ${LIB_SRCS})
ADD_LIBRARY(bye SHARED ${LIB_SRCS})

#给静态库重命名为hello,最后会生成libhello.a
SET_TARGET_PROPERTIES(hello_static PROPERTIES OUTPUT_NAME "hello")

# VERSION指代动态库版本,SOVERSION指代API版本。
SET_TARGET_PROPERTIES (hello PROPERTIES VERSION 1.2 SOVERSION 1)
SET_TARGET_PROPERTIES (bye PROPERTIES VERSION 1.2 SOVERSION 1)

#指定链接库输出路径
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

# 安装库文件
INSTALL(TARGETS hello
	LIBRARY DESTINATION lib
	ARCHIVE DESTINATION lib)

INSTALL(TARGETS bye
	LIBRARY DESTINATION lib
	ARCHIVE DESTINATION lib)

# 安装头文件
INSTALL(FILES ${PROJECT_SOURCE_DIR}/include/hello.h bye.h DESTINATION include)
发布了80 篇原创文章 · 获赞 68 · 访问量 7557

猜你喜欢

转载自blog.csdn.net/weixin_44048823/article/details/100824423