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位工程


构建结果:

打开hello_world_1.sln即可打开工程

步骤五:
构建64位工程


构建结果:


步骤六:分别编译两个工程,生成可执行文件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