Cmake-learning

可以把cmake看成一款自动生成 Makefile的工具,所以编译流程就变成了:cmake—>make–>可执行文件

在哪个目录执行cmake +txt位置        就会在哪个目录生成构造文件和可执行文件

project(HELLO): 非强制,指明项目名称

add_executable(hello ./main.c):

add_executable(目标bin名字 源函数):

有多个源文件要编译,则可以用变量存起所有.c源文件,.h则放在和.c一起就行,就变成

set(SRC_LIST main.c hello.c)

add_executable(hello $( SRC_LIST)):

将某些源文件编译成库文件方法

add_library(目标库名称SHARED hello.c) #生成动态库文件

add_library(目标库名称STATIC hello.c) #生成静态库文件

可以给生成的库改名

set_target_properties(目标库名称PROPERTIES OUTPUT_NAME "改名")

设置库文件的默认输出目录:

set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

找到指定库:

find_library(存放库路径变量 指定库名称 HINTS 库路径)

find_library(TESTFUNC_LIB testFunc HINTS ${PROJECT_SOURCE_DIR}/testFunc/lib)

将目标文件和库文件链接

target_link_libraries (目标文件 库文件})

target_link_libraries (main ${TESTFUNC_LIB})

set语法:

set(<variable_name> <value> [CACHE <type> <docstring> [FORCE]])

将源文件搞到一个变量中:

set( SRC_LIST

        ./main.c

        ./testFunc1.c

        ./testFunc.c)

cmake提供了一个命令可以把指定目录下所有的源文件存储在一个变量中,这个命令就是

aux_source_directory(指定目录   变量)

一般是这样用的:

aux_source_directory(. SRC_LIST)

add_executable(main ${SRC_LIST})

代码分层的情况下编写cmake

CMakeLists.txt和main.c在同一目录下

向工程添加多个指定头文件的搜索路径,路径之间用空格分隔

include_directories (路径1 路径2 … …)

include_directories (test_func test_func1)

也可以在main.c中include来达到一样的目的

#include "test_func/testFunc.h"

#include "test_func1/testFunc1.h"

更正规一点,就是一层一层解析cmake

增加编译子目录。其基本语法格式是:

add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

add_subdirectory(子目录 [输出bin目录] [标志])

子目录是包含源文件和txt的,相当将子.txt拷贝到父.txt

预定义变量:

set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

这里的set其实是和前面的一样,只是EXECUTABLE_OUTPUT_PATH是个系统自带的预定义变量,其意义如下:

EXECUTABLE_OUTPUT_PATH :目标二进制可执行文件的存放位置

PROJECT_SOURCE_DIR:工程的根目录

所以,这里set的意思是把存放elf文件的位置设置为工程根目录下的bin目录。

其实不管再怎么样,我认为重点关注的只有:

生成目标文件这句,

add_executable(hello $( SRC_LIST)):

有的时候目标文件会暂时没指定,那么就看有米有这个语句:target_sources(目标文件 源文件),这是指定目标文件的源文件的语句。

以及生成库这句,

add_library(目标库名称SHARED hello.c) #生成动态库文件

新接触一个项目,了解项目组织结构的最快方式就是看编译流程~通过重点关注目标文件、目标库的生成流程,我们可以清晰的看到庞大项目的脉络。

相关推荐

  1. Cmake

    2024-05-10 06:26:04       51 阅读
  2. <span style='color:red;'>Cmake</span>

    Cmake

    2024-05-10 06:26:04      69 阅读
  3. cmake

    2024-05-10 06:26:04       51 阅读
  4. <span style='color:red;'>CMake</span>

    CMake

    2024-05-10 06:26:04      67 阅读
  5. cmake

    2024-05-10 06:26:04       27 阅读
  6. CMakeCMake打包Dll

    2024-05-10 06:26:04       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 06:26:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 06:26:04       100 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 06:26:04       82 阅读
  4. Python语言-面向对象

    2024-05-10 06:26:04       91 阅读

热门阅读

  1. 大数据技术概述_2.大数据面临的5个方面的挑战

    2024-05-10 06:26:04       39 阅读
  2. AIGC笔记--Diffuser的训练pipeline

    2024-05-10 06:26:04       37 阅读
  3. 标准库bind函数

    2024-05-10 06:26:04       33 阅读
  4. win7下安装python,matplotlib,numpy

    2024-05-10 06:26:04       33 阅读
  5. 如何利用AI提高内容生产效率?

    2024-05-10 06:26:04       32 阅读
  6. 揭秘:深度学习与自然语言处理的本质差异

    2024-05-10 06:26:04       30 阅读
  7. HTTP协议:通信机制、特点及实践应用

    2024-05-10 06:26:04       34 阅读
  8. Vue从入门到精通-13-Vue-router路由

    2024-05-10 06:26:04       32 阅读
  9. 代码随想录算法训练营第四十四天

    2024-05-10 06:26:04       35 阅读