1. 代碼目錄結(jié)構(gòu)
├─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 可執(zhí)行文件輸出目錄(可以自動(dòng)生成)
testcodes1/build_x64 CMake文件生成目錄(需要用戶手動(dòng)創(chuàng)建)
testcodes1/build_x86 CMake文件生成目錄(需要用戶手動(dòng)創(chuàng)建)
2. CMakeLists.txt 解析:
指定CMAKE的最低版本(可以省略)
cmake_minimum_required(VERSION 3.8)
定義整個(gè)CMake的工程名
PROJECT (hello_world_1) #定義整個(gè)CMake的工程名
設(shè)置生成文件的輸出路徑為 EXECUTEABLE_OUTPUT_PATH ,為了32位和64位的文件互相不沖突奕塑,根據(jù)編譯設(shè)置將他們放到不同的子目錄
IF(CMAKE_CL_64)
SET(EXECUTEABLE_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/bin/x64") #定義可執(zhí)行文件的存放目錄
ELSE(CMAKE_CL_64)
SET(EXECUTEABLE_OUTPUT_PATH "${PROJECT_SOURCE_DIR}/bin/x86")
ENDIF(CMAKE_CL_64)
添加頭文件目錄郎汪,這個(gè)是添加引用的命令,并不會把文件添加到列表中
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})#在目錄結(jié)構(gòu)中添加source文件夾嗡贺,文件夾下添加變量SOURCE_all中的所有文件
FILE (GLOB SOURCE_sample "src/sample/*.cpp") #將src/sample文件夾下的所有cpp文件添加到 SOURCE_sample 變量中
SOURCE_GROUP("source/sample" FILES ${SOURCE_sample})#在目錄source結(jié)構(gòu)下添加sample文件夾囊蓝,文件夾下添加變量SOURCE_sample中的所有文件
FILE (GLOB INCLUDE_all "include/*.h") #將include文件夾下的所有.h文件添加到 INCLUDE_all變量中
SOURCE_GROUP("include" FILES ${INCLUDE_all})#在目錄結(jié)構(gòu)下添加include文件夾邪媳,文件夾下添加變量INCLUDE_all中的所有文件
FILE (GLOB INCLUDE_sample "include/sample/*.h") #將include/sample文件夾下的所有cpp文件添加到 INCLUDE_sample 變量中
SOURCE_GROUP("include/sample" FILES ${INCLUDE_sample})#在目錄include結(jié)構(gòu)下添加sample文件夾,文件夾下添加變量INCLUDE_sample中的所有文件
將前面添加的所有源文件添加到ALL_SOURCES 變量下檬洞,方便后面使用
SET(ALL_SOURCES
${SOURCE_all}
${SOURCE_sample}
${INCLUDE_all}
${INCLUDE_sample}
)
指定生成的文件的類型(可執(zhí)行文件狸膏,動(dòng)態(tài)庫,靜態(tài)庫)
ADD_EXECUTABLE(sayhello_world ${ALL_SOURCES}) # 告訴CMake:工程編譯后生成的是可執(zhí)行文件(sayhello_world.exe)添怔,源文件是上面定義的那些
配合下面的命令湾戳,將生成的可執(zhí)行文件放到EXECUTEABLE_OUTPUT_PATH
SET_TARGET_PROPERTIES(sayhello_world PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${EXECUTEABLE_OUTPUT_PATH}")#指定可執(zhí)行文件的存放目錄
3. 構(gòu)建過程:
步驟一:
命令行工具進(jìn)入代碼根目錄testcodes1
步驟二:
分別創(chuàng)建32位和64位構(gòu)建目錄(也可以手動(dòng)在目錄下創(chuàng)建文件夾,文件夾名稱是為了容易區(qū)分广料,實(shí)際可以創(chuàng)建成任何名稱):
mkdir build_x86
mkdir build_x64
步驟三:
輸入命令打開cmake-gui(也可以直接點(diǎn)擊圖標(biāo)打開):
cmake-gui
步驟四:
構(gòu)建32位工程
構(gòu)建結(jié)果:
打開hello_world_1.sln即可打開工程
步驟五:
構(gòu)建64位工程
構(gòu)建結(jié)果:
步驟六:分別編譯兩個(gè)工程砾脑,生成可執(zhí)行文件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