Basic executable

  1. project(t1)
  2. message(STATUS " binary path is" ${PROJECT_BINARY_DIR})
  3. set(CMAKE_CXX_STANDARD 17)
  4. add_executable(t1 main)

sub directoryand make install path

cmake_minimum_required(VERSION 3.16)

project(t2)
message(STATUS " binary path is" ${PROJECT_BINARY_DIR})
message(STATUS " source path is" ${PROJECT_SOURCE_DIR})

set(CMAKE_CXX_STANDARD 17)
# 添加子目录(子目录也有CMkaeLists,用于本目录的编译)
add_subdirectory(src bin)

# 安装readme和版权文件
install(FILES COPYRIGHT README DESTINATION share/doc/cmake/t2)
# 安装sh文件
install(PROGRAMS runhello.sh DESTINATION bin)
# 安装doc hello.txt
install(DIRECTORY doc/ DESTINATION share/doc/cmake/t2)
# 安装可执行文件
install(PROGRAMS ${PROJECT_BINARY_DIR}/bin/t2 DESTINATION bin)

build Static/Dynamic library

cmake_minimum_required(VERSION 3.16)

set(CMAKE_CXX_STANDARD 17)

message(STATUS "the library output path is" ${LIBRARY_OUTPUT_PATH})

# 编译动态库,不是executable
add_library(t3 SHARED hello.cpp)
# 设置动态库版本号
set_target_properties(t3 PROPERTIES VERSION 1.2 SOVERSION 1)

# 编译静态库
add_library(t3_static STATIC hello.cpp)
# 重命名静态库
set_target_properties(t3_static PROPERTIES OUTPUT_NAME "t3")

# 安装库文件
install(TARGETS t3 t3_static
    LIBRARY DESTINATION lib
    ARCHIVE DESTINATION lib)
# 安装头文件
install(FILES hello.hpp DESTINATION include/t3)

add link for Static/Dynamic library

cmake_minimum_required(VERSION 3.16)

add_executable(t4 main.cpp)
# 添加头文件搜索路径
include_directories(/home/barret/t3/include/t3)

# 查找lib文件
# find_library(LIB_PATH libt3.a /home/barret/t3/lib) # 静态库
find_library(LIB_PATH libt3.so /home/barret/t3/lib) # 动态库
if(NOT LIB_PATH)
    MESSAGE(FATAL_ERROR "libt3 not found")
endif(NOT LIB_PATH)

message(STATUS "lib path" ${LIB_PATH})
# 链接库
target_link_libraries(t4 ${LIB_PATH})