CMakeLists代码分析

 1 cmake_minimum_required (VERSION 2.8)
 2
 3 #指定项目的名称(CMAKE_PROJECT_NAME)
 4 #在cmake中有两个预定义变量:< projectname >_BINARY_DIR以及< projectname >_SOURCE_DIR
 5
 6 project(NetLib)
 7
 8 if(NOT CMAKE_BUILD_TYPE)
 9     set(CMAKE_BUILD_TYPE "Release")
10 endif()
11
12 set(CMAKE_CXX_COMPILER "g++")
13 set(CMAKE_CXX_FLAGS "-std=c++11 -Wall")
14 set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
15 set(CMAKE_CXX_FLAGS_RELEASE "-O3")
16
17 #PROJECT_SOURCE_DIR和PROJECT_BINARY_DIR
18 #内部构建情况下两个变量值相同。
19 #在外部构建的情况下,PROJECT_SOURCE_DIR指向的目录同内部构建相同,为CMakeList.txt所在的目录(假定为workDirectory),
20 #而PROJECT_BINARY_DIR则有所不同,指向workDirectory/build/release目录。(因为外部构建是在release文件夹里面调用cmake..)
21
22
23 #CMAKE_BUILD_TYPE=$BUILD_TYPE=release
24 message(STATUS "BUILD_TYPE: " ${CMAKE_BUILD_TYPE})
25 #这是一个转化为大写的命令,把CMAKE_BUILD_TYPE的值大写后写入BUILD_TYPE
26 string(TOUPPER ${CMAKE_BUILD_TYPE} BUILD_TYPE)
27 #CXXFLAGS = -std=c++11 -Wall -03,这是存放一些g++的后缀,std=c++11这是要包含的库
28 message(STATUS "CXXFLAGS: " ${CMAKE_CXX_FLAGS} " " ${CMAKE_CXX_FLAGS_${BUILD_TYPE}})
29
30 #可以通过 SET 指令重新定义 EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH 变量来指定最终的目标二进制的位置
31 #PROJECT_BINARY_DIR=workDirectory/build/release
32 #库文件
33 set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
34 #可执行文件
35 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
36
37 #INCLUDE_DIRECTORIES类似gcc中的编译参数“-I”,指定编译过程中编译器搜索头文件的路径
38 include_directories(${PROJECT_SOURCE_DIR}/src)
39
40 #设定源文件和头文件就在这四个文件夹内
41 set(SRC_LIST "log" "base" "net" "http")
42
43 foreach(SUB_DIR ${SRC_LIST})
44     #搜集在指定路径下的所有源文件的文件名,将输出结果列表储存在指定的变量(SUB_LIST)中。
45     aux_source_directory(src/${SUB_DIR} SUB_LIST)
46     #和add_executable类似,生成库文件,SHARED代表动态库,STATIC代表静态库, 最后一个参数代表此库的源文件列表,此指令只有三个参数
47     #这里是生成库,名字是NetLib_${SUB_DIR}
48     add_library(NetLib_${SUB_DIR} ${SUB_LIST})
49     #参数中的TARGETS后面跟的就是我们通过ADD_EXECUTABLE或者ADD_LIBRARY定义的目标文件,可能是可执行二进制、动态库、静态库。
50     #因为DESTINATION没有用绝对路径,所以用的是CMAKE_INSTALL_PREFIX,也就是release/../release-install/lib
51     #这里我们把库安装好,放到../release-install/lib里面去
52     install(TARGETS NetLib_${SUB_DIR} DESTINATION lib)
53     #DIRECTORY后面连接的是所在Source目录的相对路径,这里把所有的头文件都安装好
54     #install(FILES flie DESTINATION dir_path) #执行make install时,把file拷贝到dir_path
55     #这里把src/${SUB_DIR}的文件里面的.h文件都安装好,放在../release-install/include里面去
56     install(DIRECTORY src/${SUB_DIR}/ DESTINATION include FILES_MATCHING PATTERN "*.h")
57 endforeach()
58
59 #target_link_libraries(target_name lib_name ...)
60 #给目标添加依赖库,类似与gcc -l lib_name,此指令有两个用处,一个是给可执行target_name 添加库依赖,二是给库target_name 添加库依赖。
61 #这里相当于生成库文件名字是NetLib_base和NetLib_net,这里的库需要依赖pthread
62 target_link_libraries(NetLib_base pthread)
63 target_link_libraries(NetLib_net pthread)
64
65 #项目最终编译生成的可执行文件名称则是由ADD_EXECUTABLE命令来指定的。
66 add_executable(main src/main.cc)
67 target_link_libraries(main NetLib_http pthread)
68
69 #这是调用下面这两个目录里的cmakelist.txt
70 #用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置(由binary_dir指定)。
71 add_subdirectory(src/log/tests)
72 add_subdirectory(src/net/tests)

原文地址:https://www.cnblogs.com/eelzhblog/p/11060948.html

时间: 2024-08-07 22:45:25

CMakeLists代码分析的相关文章

java代码分析及分析工具

java代码分析及分析工具 一个项目从搭建开始,开发的初期往往思路比较清晰,代码也比较清晰.随着时间的推移,业务越来越复杂.代码也就面临着耦合,冗余,甚至杂乱,到最后谁都不敢碰. 作为一个互联网电子商务网站的业务支撑系统,业务复杂不言而喻.从09年开始一直沿用到现在,中间代码经过了多少人的手,留下了多少的坑,已经记不清楚了,谁也说不清了. 代码的维护成本越来越高.代码已经急需做调整和改善.最近项目组专门设立了一个小组,利用业余时间做代码分析的工作,目标对核心代码进行分析并进行设计重构. 代码分析

Java静态代码分析工具Infer

Java静态代码分析工具Infer 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.Infer介绍 Infer是Facebook最新开源的静态程序分析工具,用于在发布移动应用之前对代码进行分析,找出潜在的问题.目前Facebook使用此工具分析Facebook的App,包括Android.iOS.Facebook Messenger和Instagram等. Facebook称该工具帮助其每个月检查出应用潜在的数百个Bug,例如一些空指针访问.资源

$*和[email&#160;protected]之间区别代码分析

#!/bin/bash set 'apple pie' pears peaches for i in $*           /*单引号被去掉,循环单个字符输出*/ do echo $i done [[email protected] Ex_14.02-14.31]# sh 14-14-1 apple pie pears peaches -------------------------------------------------------------- #!/bin/bash set

《linux 内核完全剖析》 keyboard.S 部分代码分析(key_map)

keyboard.S 部分代码分析(key_map) keyboard中间有这么一段,我一开始没看明白,究竟啥意思 key_map: .byte 0,27 .ascii "1234567890-=" .byte 127,9 .ascii "qwertyuiop[]" .byte 13,0 .ascii "asdfghjkl;'" .byte '`,0 .ascii "\\zxcvbnm,./" .byte 0,'*,0,32

20145234黄斐《网络对抗技术》实验四,恶意代码分析

恶意代码 概述 恶意代码是指故意编制或设置的.对网络或系统会产生威胁或潜在威胁的计算机代码.最常见的恶意代码有计算机病毒(简称病毒).特洛伊木马(简称木马).计算机蠕虫(简称蠕虫).后门.逻辑炸弹等. 特征: 恶意的目的,获取靶机权限.用户隐私等 本身是计算机程序,可以执行,并作用于靶机 通过执行发生作用,一般来说不运行是没问题的 恶意代码分析 在大多数情况下,进行恶意代码分析时,我们将只有恶意代码的可执行文件本身,而这些文件并不是我们人类可读的.为了了解这些文件的意义,你需要使用各种工具和技巧

20145326蔡馨熠《网络对抗》——恶意代码分析

20145326蔡馨熠<网络对抗>--恶意代码分析 1.实验后回答问题 (1)如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所以想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些,用什么方法来监控.. 需要监控什么? 系统中各种程序.文件的行为. 还需要注意是否会出现权限更改的行为. 注册表. 是否有可疑进程. 如果有网络连接的情况,需要注意这个过程中的IP地址与端口. 用什么来监控? 最先想到的肯定是使用wireshark抓包了,再进行进一步分析. Sysinternals

代码分析—“CA0052 没有选择要分析的目标”(VS2012)

情况: 1.未采用代码分析时程序正常编译 2.采用代码分析,会提示"没有选择分析目标"或"未加载制定版本的程序集"...的错误 分析: 是由于代码分析依赖程序集的强签名,包括版本 解决方案: 1.修改代码分析工具的配置项: FxCopCmd.exe.config里节点AssemblyReferenceResolveMode的Value值StrongName修改为StrongNameIgnoringVersion或None 2.修改当前分析的项目: .csproj增加

常用 Java 静态代码分析工具的分析与比较

转载自: http://www.oschina.net/question/129540_23043 简介: 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了现有 4 种主流 Java 静态代码分析工具 (Checkstyle,FindBugs,PMD,Jtest),最后从功能.特性等方面对它们进行分析和比较,希望能够帮助 Java 软件开发人员了解静态代码分析工具,并选择合适的工具应用到软件开发中. 引言 在 Java 软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代

驱动相关的内核代码分析

arch\arm\include\asm\Io.h #define __raw_readl(a) (__chk_io_ptr(a), *(volatile unsigned int __force   *)(a)) #define __raw_writel(v,a) (__chk_io_ptr(a), *(volatile unsigned int __force   *)(a) = (v)) 注:(volatile unsigned int __force   *)指针强制转换为unsigne