美文网首页
CMAKE 总结

CMAKE 总结

作者: hehehehe | 来源:发表于2020-08-18 17:32 被阅读0次
    设置编译类型
    add_executable(demo demo.cpp) # 生成可执行文件
    add_library(common STATIC util.cpp) # 生成静态库
    add_library(common SHARED util.cpp) # 生成动态库或共享库
    
    自定义搜索规则
    file(GLOB SRC_LIST "*.cpp" "protocol/*.cpp")
    add_library(demo ${SRC_LIST})
    # 或者
    file(GLOB SRC_LIST "*.cpp")
    file(GLOB SRC_PROTOCOL_LIST "protocol/*.cpp")
    add_library(demo ${SRC_LIST} ${SRC_PROTOCOL_LIST})
    # 或者
    aux_source_directory(. SRC_LIST)
    aux_source_directory(protocol SRC_PROTOCOL_LIST)
    add_library(demo ${SRC_LIST} ${SRC_PROTOCOL_LIST})
    
    查找指定的库文件

    find_library(VAR name path)查找到指定的预编译库,并将它的路径存储在变量中

    find_package(PCL 1.7 REQUIRED)
    
    设置包含的目录
    include_directories(
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${CMAKE_CURRENT_BINARY_DIR}
        ${CMAKE_CURRENT_SOURCE_DIR}/include
    )
    include_directories(${PCL_INCLUDE_DIRS})
    
    设置链接库搜索目录
    link_directories(
        ${CMAKE_CURRENT_SOURCE_DIR}/libs
    )
    link_directories(${PCL_LIBRARY_DIRS})
    
    设置 target 需要链接的库
    target_link_libraries( # 目标库
                           demo
     
                           # 目标库需要链接的库
                           # log-lib 是上面 find_library 指定的变量名
                           ${log-lib} )
    
    target_link_libraries(${PROJECT_NAME} LASlib)
    target_link_libraries(${PROJECT_NAME} ${PCL_LIBRARIES})
    
    target_link_libraries(demo libface.a) # 链接libface.a
    target_link_libraries(demo libface.so) # 链接libface.so
    
    target_link_libraries(demo ${CMAKE_CURRENT_SOURCE_DIR}/libs/libface.a)
    target_link_libraries(demo ${CMAKE_CURRENT_SOURCE_DIR}/libs/libface.so)
    
    target_link_libraries(demo
        ${CMAKE_CURRENT_SOURCE_DIR}/libs/libface.a
        boost_system.a
        boost_thread
        pthread)
    
    
    设置变量
    set 直接设置变量的值
    set(SRC_LIST main.cpp test.cpp)
    add_executable(demo ${SRC_LIST})
    
    set 追加设置变量的值
    set(SRC_LIST main.cpp)
    set(SRC_LIST ${SRC_LIST} test.cpp)
    add_executable(demo ${SRC_LIST})
    
    list 追加或者删除变量的值
    set(SRC_LIST main.cpp)
    list(APPEND SRC_LIST test.cpp)
    list(REMOVE_ITEM SRC_LIST main.cpp)
    add_executable(demo ${SRC_LIST})
    
    
    aux_source_directory(. DIR_SRCS) 查找当前目录下的所有源文件,并将名称保存到 DIR_SRCS 变量
    同一目录,多个源文件
    # CMake 最低版本号要求
    cmake_minimum_required (VERSION 2.8)
    
    # 项目信息
    project (Demo2)
    
    # 查找当前目录下的所有源文件
    # 并将名称保存到 DIR_SRCS 变量
    aux_source_directory(. DIR_SRCS)
    
    # 指定生成目标
    add_executable(Demo ${DIR_SRCS})
    
    多个目录,多个源文件

    ./Demo3
    +--- main.cc
    +--- math/
    +----- MathFunctions.cc
    +----- MathFunctions.h

    对于这种情况,需要分别在项目根目录 Demo3 和 math 目录里各编写一个 CMakeLists.txt 文件。为了方便,我们可以先将 math 目录里的文件编译成静态库再由 main 函数调用。
    根目录中的 CMakeLists.txt

    # CMake 最低版本号要求
    cmake_minimum_required (VERSION 2.8)
    
    # 项目信息
    project (Demo3)
    
    # 查找当前目录下的所有源文件
    # 并将名称保存到 DIR_SRCS 变量
    aux_source_directory(. DIR_SRCS)
    
    # 添加 math 子目录
    add_subdirectory(math)
    
    # 指定生成目标
    add_executable(Demo main.cc)
    
    # 添加链接库
    target_link_libraries(Demo MathFunctions)
    
    

    子目录中的 CMakeLists.txt

    # 查找当前目录下的所有源文件
    # 并将名称保存到 DIR_LIB_SRCS 变量
    aux_source_directory(. DIR_LIB_SRCS)
    
    # 生成链接库
    add_library (MathFunctions ${DIR_LIB_SRCS})
    

    相关文章

      网友评论

          本文标题:CMAKE 总结

          本文链接:https://www.haomeiwen.com/subject/byukjktx.html