CMake构建单工程使用说明

1. 代码目录结构

├─testcodes1

│ │ CMakeLists.txt

│ │

│ ├─bin

│ ├─build_x64

│ ├─build_x86

│ ├─include

│ │ └─sample

│ │ sample1.h

│ │

│ └─src

│ │ main.cpp

│ │

│ └─sample

│ sample1.cpp

testcodes1 代码根目录

testcodes1/include 头文件目录

testcodes1/src 源文件目录

testcodes1/bin 可执行文件输出目录(可以自动生成)

testcodes1/build_x64 CMake文件生成目录(需要用户手动创建)

testcodes1/build_x86 CMake文件生成目录(需要用户手动创建)

2. CMakeLists.txt 解析:

指定CMAKE的最低版本(可以省略)

cmake_minimum_required(VERSION 3.8)

定义整个CMake的工程名

PROJECT (hello_world_1) #定义整个CMake的工程名

设置生成文件的输出路径为 EXECUTEABLE_OUTPUT_PATH ,为了32位和64位的文件互相不冲突,根据编译设置将他们放到不同的子目录

IF(CMAKE_CL_64)

SET(EXECUTEABLE_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/bin/x64") #定义可执行文件的存放目录

ELSE(CMAKE_CL_64)

SET(EXECUTEABLE_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/bin/x86")

ENDIF(CMAKE_CL_64)

添加头文件目录,这个是添加引用的命令,并不会把文件添加到列表中

INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include")#告诉CMake:工程的头文件目录

INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include/sample")#告诉CMake:工程的头文件目录

为工程添加源文件

FILE (GLOB SOURCE_all "src/*.cpp") #将src文件夹下的所有cpp文件添加到 SOURCE_all 变量中

SOURCE_GROUP("source" FILES ${SOURCE_all})#在目录结构中添加source文件夹,文件夹下添加变量SOURCE_all中的所有文件

FILE (GLOB SOURCE_sample "src/sample/*.cpp") #将src/sample文件夹下的所有cpp文件添加到 SOURCE_sample 变量中

SOURCE_GROUP("source/sample" FILES ${SOURCE_sample})#在目录source结构下添加sample文件夹,文件夹下添加变量SOURCE_sample中的所有文件

FILE (GLOB INCLUDE_all "include/*.h") #将include文件夹下的所有.h文件添加到 INCLUDE_all变量中

SOURCE_GROUP("include" FILES ${INCLUDE_all})#在目录结构下添加include文件夹,文件夹下添加变量INCLUDE_all中的所有文件

FILE (GLOB INCLUDE_sample "include/sample/*.h") #将include/sample文件夹下的所有cpp文件添加到 INCLUDE_sample 变量中

SOURCE_GROUP("include/sample" FILES ${INCLUDE_sample})#在目录include结构下添加sample文件夹,文件夹下添加变量INCLUDE_sample中的所有文件

将前面添加的所有源文件添加到ALL_SOURCES 变量下,方便后面使用

SET(ALL_SOURCES

${SOURCE_all}

${SOURCE_sample}

${INCLUDE_all}

${INCLUDE_sample}

)

指定生成的文件的类型(可执行文件,动态库,静态库)

ADD_EXECUTABLE(sayhello_world ${ALL_SOURCES}) # 告诉CMake:工程编译后生成的是可执行文件(sayhello_world.exe),源文件是上面定义的那些

配合下面的命令,将生成的可执行文件放到EXECUTEABLE_OUTPUT_PATH

SET_TARGET_PROPERTIES(sayhello_world PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXECUTEABLE_OUTPUT_PATH}")#指定可执行文件的存放目录

3. 构建过程:

步骤一:

命令行工具进入代码根目录testcodes1

步骤二:

分别创建32位和64位构建目录(也可以手动在目录下创建文件夹,文件夹名称是为了容易区分,实际可以创建成任何名称):

mkdir build_x86

mkdir build_x64

步骤三:

输入命令打开cmake-gui(也可以直接点击图标打开):

cmake-gui

步骤四:

构建32位工程

image.png
image.png

构建结果:

image.png

打开hello_world_1.sln即可打开工程

image.png

步骤五:

构建64位工程

image.png
image.png

构建结果:

image.png
image.png

步骤六:分别编译两个工程,生成可执行文件sayhello_world.exe

├─bin

│ ├─x64

│ │ ├─Debug

│ │ │ sayhello_world.exe

│ │ │ sayhello_world.ilk

│ │ │ sayhello_world.pdb

│ │ │

│ │ └─Release

│ │ sayhello_world.exe

│ │

│ └─x86

│ ├─Debug

│ │ sayhello_world.exe

│ │ sayhello_world.ilk

│ │ sayhello_world.pdb

│ │

│ └─Release

│ sayhello_world.exe

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,773评论 19 139
  • 1.安装 $sudo apt-get install cmake 2.示例:简单的文件目录 sample |—...
    荷包蛋酱阅读 29,841评论 0 15
  • 注:首发地址 1. 前言 当在做 Android NDK 开发时,如果不熟悉用 CMake 来构建,读不懂 CMa...
    cfanr阅读 24,687评论 1 53
  • Analysis of the shots of4 Months, 3 Weeks and 2 Days 4 Mo...
    Emily_____阅读 2,383评论 0 0
  • The Marriage of Maria Braunand Fassbender's Creative Styl...
    Emily_____阅读 1,449评论 0 0