cmake入门笔记---1

cmake包含预定义变量和基本指令。其中,cmake的基本指令是不区分大小写的,即:
cmake_minimum_
required (VERSINON 1)CMAKE_MINIMUM_required(VERSION 1)等价,随自己的习惯可自由选择。

例子1:

#最低版本要求
cmake_minimum_required(VERSION 2.8)
project(T)

设置变量名。即SRC=main.cpp

set(SRC main.cpp)

执行cmake时,打印相关信息,cmake的指令不区分大小写,如这里的message status

message(STATUS "This is the binary dir:" ${PROJECT_BINARY_DIR})
MESSAGE(status "This is the source dir:" ${PROJECT_SOURCE_DIR})

使用C++11 标准编译。CMAKE_CXX_FLAGS为指令集

set(CMAKE_CXX_FLAGS “-std=c++11”)

生成可执行文件

add_executable(t1 ${SRC})

将一份名为main.cpp的源文件放在与该CMakeLists.txt同目录下,执行mkdir build && cd build cmake .. && make即可生成文件名为t1的可执行文件

例子2:

首先说明该例子包含两个目录,工程目录取名proj,源文件目录取名src,即srcproj的子目录,src目录中包含源码文件

先看src中的CMakeLists.txt

#第二级目录中可不加cmake版本要求
#cmake_minimum_required(VERSION 3.7)

只是将当前目录下的main.cpp文件用target代替

set(target main.cpp)

将该目录下所有源文件统一用target代替。

aux_source_directory(./ target)

设置生成可执行文件的位置,对应于build中的bin目录下

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

add_executable(t2 ${target})

在看看工程目录下的CMakeLists.txt:

#顶层的cmake文件添加加版本要求
cmake_minimum_required (VERSION 3.7)
#最外层包含项目名称
project(t2)

添加目录包含目录

add_subdirectory(src)

需要说明的是:将所有源码文件放在src目录之下,其中${PROJECT_BINARY_DIR}是常用的cmake的变量名,表示所生成二进制文件目录,${}表示取值,EXECUTABLE_OUTPUT_PATH表示可执行文件输出路径,他也是cmake自带的变量。

例子3:

首先说明的是:该例子主要是为了生成文件到指定目录。

工程文件名依然为proj,该目录之下包含lib_hello文件和顶层的CMakeLists.txtlib_hello里边包含源码文件和该目录的CMakeLists.txt文件.

lib_hello文件CMakeLists.txt内容如下:

#为该目录下所有文件其别名为SRC
aux_source_directory(./ SRC)

生成动态链接库,库名字叫做hello_shared,SHARED是动态库的标记符号,${SRC}表示取SRC所包含的所有文件

add_library(hello_shared SHARED ${SRC})

同理,生成静态链接库,动态库和静态库的名字不能重名

add_library(hello_static STATIC ${SRC})

设置生成库的名称

set_target_properties(hello_static PROPERTIES OUTPUT_NAME "hellos")
set_target_properties(hello_shared PROPERTIES OUTPUT_NAME "hellod")

设置动态库的版本号

set_target_properties(hello_shared PROPERTIES VERSION 1.1 SOVERSION 1)

设置库文件路径

set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

顶层目录下的CMakeLists.txt文件内容为:

cmake_minimum_required(VERSION 3.7)

project(t3)

ADD_SUBDIRECTORY(lib_hello)

将上述文件组合,便可在build/bin生成文件

例子4:

首先说明的是:例4是在例子3的基础上进一步深入,这里用到了例子3生成的库,把该库当做已知。
首先项目目录t4,其包含子目录srcsrcb包含源码文件吗,其中的源码文件用到了例子3中的头文件.
src中,主函数如下:

#include 
int main()
{
        Hello();
        return 0;
}

src目录中的cmake文件如下:

aux_source_directory(./ SRC)

填加非标准的共享库链接路径。一定在add_executable之间

link_directories(/home/yxg/bishiti/cmake/t3/build/bin)

add_executable(t4 ${SRC})

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

设置路径.这里的CMAKE_PROJECT_DIR并非cmake自带的变量,而是自己定义的

set(CMAKE_PROJECT_DIR /home/yxg/bishiti/cmake)

包含路径

include_directories(${CMAKE_PROJECT_DIR}/t3/lib_hello)

链接动态库

target_link_libraries(t4 hellod)

TARGET_LINK_LIBRARIES(t4 libhellos.a) # 链接

项目目录下的cmake文件如下内容

cmake_minimum_required (VERSION 3.2)
project(t4)
add_subdirectory(src)

通过例子4,我们就可以使用自己所编写的库了!!

相关文章

这个问题和curl无法访问https资源是类似的,现在curl可以访问https资源,但是使用pecl安装扩展的时候不行...
在浏览器输入chrome://flags/回车,找到Omnibox UI Hide Steady-State URL Scheme and Trivial Subdoma...
方法一: 我们都知道Ubuntu有一个专门用来安装软件的工具apt,我们可以用它来全自动安装arm-linux-gcc。...
中文的windows下的cmd默认使用GBK的编码,敲代码时,页面使用的是UTF-8(65001),而powershell控制台默认...
提示错误: arm-linux-gcc:Command not found PATH里有/usr/oca/arm/bin,但是make的时候,就是找不到 a...
我在Graph API开发中用的最多的测试工具就是Graph Explore,这个是微软开发的网页版的Graph API的测试工...