关于如何编写CMakeLists.txt的基本要求

什么是CMakeLists:

        CMakeLists.txt是CMake构建系统的配置文件,它通过储存项目的构建规则和依赖关系等信息来指导CMake如何生成各种类型的目标文件。这些文件包括可执行文件、静态链接库和动态链接库。

如下是我本人在公司项目下编写的一个基本框架的CMakeLists.txt文件例子:

# 指定CMake的最低版本要求为2.8.12

cmake_minimum_required(VERSION 2.8.12)

# 定义项目名称和版本号

project(MyProject VERSION 1.0)

# 设置变量(设置编译器)

set(CMAKE_C_COMPILER ${TOOLCHAIN_PREFIX}gcc)

set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PREFIX}g++)

# 设置变量(设置编译器的编译标志:以获得更好的性能和更稳定的代码)

# set C_FLAGS_DEBUG

set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}  -std=gnu99 -o0 -g -ggdb  -Werror -Wno-error=format-security")

# set C_FLAGS_RELEASE

set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -std=gnu99 -o3  -Werror -Wno-error=format-security -s ")

# set CXX_FLAGS_DEBUG

set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}  -std=c++11 -o0 -g -ggdb  -Werror -Wno-error=format-security")

# set CXX_FLAGS_RELEASE

set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -std=c++11 -o3  -Werror -Wno-error=format-security -s ")

 # 设置变量(配置CMake构建系统:以获得更好的构建和运行结果)

set(CMAKE_SKIP_BUILD_RPATH FALSE)

set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# 根据条件判断执行不同的操作

        用于设置环境变量LIBSCPI_ROOT的值。如果环境变量LIBSCPI_ROOT未定义,则将其设置为"../scpi-parser",在编译过程中收集"../scpi-parser"目录下的所有C源文件。
        LIBSCPI_ROOT:用于指定解析库的根目录路径,如果未定义就自定义为"../scpi-parser",这样在后续构建过程中,CMake可以使用这个路径来查找和链接到SCPI解析器库。

if (NOT DEFINED ENV{LIBSCPI_ROOT})

    set(LIBSCPI_ROOT "../scpi-parser")

endif()

        如上还可以使用另外一种索引路径的方法,它使用file(GLOB)命令来查找并收集指定目录下的所有C源文件。在这个例子中,它会在以下目录中查找所有的.c文件:

file(GLOB SOURCES

        "c_driver/src/bus/*

        c" "c_driver/src/common/*

        c" "c_driver/src/ipcore/*

        c" "c_driver/src/mem/*.c")

# 指定头文件的搜索路径

        作用是将${LIBSCPI_ROOT}/libscpi/inc目录添加到编译过程中的包含路径中。这样,编译器就可以在该目录下查找头文件(.h或.hpp文件)进行编译

include_directories(

        ${LIBSCPI_ROOT}/libscpi/inc

)

        如上还可以使用另外一种在目录中找到所需的头文件的方法,就是手动添加一些自己需要的路径进去,用来进行编译

include_directories(

    ${CMAKE_CURRENT_SOURCE_DIR}/include         #当前源代码目录下的include子目录

    /usr/local/include                                                        #/usr/local/include目录

    /usr/include                                                                #/usr/include目录

    ${CMAKE_CURRENT_SOURCE_DIR}/c_driver/include       

                                                                        #当前源代码目录下的c_driver/include子目录

    )

# 将目录中的源文件添加到编译列表中进行编译

        LIBSCPI_SOURCE_LISTSCPI_WRAPPER_SOURCE_LIST是两个变量名,它们通常用于存储编译过程中需要处理的源文件列表:

  • LIBSCPI_SOURCE_LIST:这个变量可能用于存储与${LIBSCPI_ROOT}/libscpi/src目录相关的源文件列表。具体含义取决于代码上下文和用途。

  • SCPI_WRAPPER_SOURCE_LIST:这个变量可能用于存储与当前源代码目录下的源文件相关的列表。具体含义取决于代码上下文和用途。

aux_source_directory(${LIBSCPI_ROOT}/libscpi/src LIBSCPI_SOURCE_LIST)

aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} SCPI_WRAPPER_SOURCE_LIST)

# 设置目标名称

set(TARGET "scpi")

# 将指定的源文件列表添加到目标名称的共享库中

        ${LIBSCPI_SOURCE_LIST} 和${SCPI_WRAPPER_SOURCE_LIST})是两个变量,分别表示与${LIBSCPI_ROOT}/libscpi/src目录相关的源文件列表和与当前源代码目录下的源文件相关的列表。

add_library(${TARGET} SHARED ${LIBSCPI_SOURCE_LIST} ${SCPI_WRAPPER_SOURCE_LIST})

# 将动态链接库链接到目标名称中

${CMAKE_DL_LIBS})是一个变量,表示当前系统上可用的动态链接库列表

target_link_libraries(${TARGET} ${CMAKE_DL_LIBS})

如下是代码的截图仅供参考,本人也在学习如何编写CMakeLists.txt,代码是未通过测试的但是方法是ok的,后续会持续更进内容。

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值