1.创建两个头文件

首先创建两个头文件,dlib.h和slib.h动态库文件和静态库文件:

在创建两个源文件关于两个库的功能:

创建一个main.cpp,去执行两个库:

此时的文件目录:include包含两个头文件,src是包含两个源文件

现在我开始编写我都CMakeLists.txt文件来管理我们的项目:

项目的最低版本要求和项目名称:

建立两个核心变量:头文件地址和源文件地址:

set(INCLUDE_DIR   ${CMAKE_CURRENT_SORCE_DIR}/include)#变量名以及路径

set(SRC_DIR   ${CMAKE_CURRENT_SORCE_DIR}/src)

添加库:

添加静态库

add_library(slib   STATIC   ${INCLUDE_DIR}/slib.h  ${SRC_DIR}/slib.cpp)#库名称 库的属性 头文件地址和源文件地址

一般添加完库,头文件地址找不到,所以需要加一下头文件地址:

target_include_directories(slib

                                          PUBLIC

                                         $<BUILD_INTERFACE>:${INCLUDE_DIR}     #构建时的路径                   

                                        $<INSTALL_INTERFACE:include>                     #安装时的路径                                                                                                                                         )

同理添加动态库:

add_library(dlib SHARED ${INCLUDE_DIR}/dlib.h ${SRC_DIR}/slib.h)

target_include_directories(  dlib

                                             PUBLIC

                                             $<BUILD_INTERFACE>:${INCLUDE_DIR}

                                             $<INSTALL_INTERFACE>:include

                                               )

两个库文件处理好了,此时要处理可执行文件:

add_executable(demo_install main.cpp)#可执行文件名称,可执行文件(如果不是与CMakeLists.txt同级需要加路径)

把两个库与可执行文件连接:

target_link_libraries(demo_install  slib dlib)

此时构建的任务就已经完成了,我们需要编写安装的代码:

install(

TARGET  ${PROJECT_NAME} slib dlib #目标

RUNTIME DESTINATION bin #可执行文件

LIBRARY DESTINATION include #动态库

ARCHIVE DESTINATION lib  #静态库

         )

install(DIRECTORY ${INCLUDE_DIR}/          #头文件原地址

           DESTINATION  include                #安装后的地址

           FILES_MATCHING PATTERN "*.h    #只匹配h后缀的文件

)

此时所有操作都结束了,但是我们通常会遇到无法执行安装的可执行文件,我们需要写个这个脚本:if(UNIX)

set_target_properties( ${PROJECT_NAME} PROPERTIES

                                 INSTALL_PATH  "${CMAKE_INSTALL_PREFIX}/lib"

                                   # 安装后可执行文件的RPATH

                                  BUILD_WITH_INSTALL_RPATH OFF    

                                  # 构建时不使用安装RPATH(更合理)

                                  )

endif()

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐