美文网首页
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使用

    tags: 嵌入式categories: 开发 cmake 总结 交叉编译 设置编译器CMAKE_FORCE_C_...

  • CMake总结

    CMakeLists.txt cmake_minimum_required (VERSION 2.8) cmake...

  • CMAKE 总结

    2016-5-30 cmake是要比makefile更加现代的一种工具. 这里就逐步总结一下cmake的用法. 首...

  • CMAKE 总结

    设置编译类型 自定义搜索规则 查找指定的库文件 find_library(VAR name path)查找到指定的...

  • Cmake使用总结

    即将步入工作,正在实习中.......感觉还是把学生时代的良好习惯带入工作之中......博客仅在工作之外记录,不...

  • CMake使用总结

    1.安装 $sudo apt-get install cmake 2.示例:简单的文件目录 sample |—...

  • Android:Cmake总结

    target_link_libraries有什么用? 用来配置编译需要依赖的预编译好的库参考:https://ju...

  • CMAKE问题总结

    CMAKE作为一个跨平台的编译工具,有很多优势,但由于需要手动写CMakeLists.txt文件,对工程人员的要求...

  • 跨平台编译的经验之谈--Xcode之旅

    在<<跨平台编译的经验之谈--cmake编译文件的一般方法>>一文中,总结了CMake编译文件CMakeLists...

  • 9.Ubuntu安装cmake

    一、安装cmake 在cmake官网下载cmake:https://cmake.org/download/ 我没有...

网友评论

      本文标题:CMAKE 总结

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