在VScode 中利用 Cmake進行編譯運行c++項目

1、建立projectname文件夾

在裏面建立 bin、build、include、lib、src文件夾和CMakeLists.txt文件

項目中的cpp文件放在src中,h頭文件放在include中

2、CMakeLists文件的編寫

cmake_minimum_required(VERSION 2.8)
project(ModelWash)
set(CMAKE_BUILD_TYPE Release)#compile mode
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)#set path of executable file
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)#set outpath of produced lib
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g") 
include_directories(
${PROJECT_SOURCE_DIR}/include
)
add_executable(ModelWash src/Astar.cpp src/clipper.cpp src/clipper_demo.cpp src/geomancy.cpp src/house.cpp src/InnerWall.cpp src/InWall.cpp src/line.cpp src/NetDataLog.cpp src/Output_Room_Type.cpp src/point.cpp src/polygon.cpp src/room.cpp src/score.cpp src/StrTransform.cpp src/svd.cpp src/test.cpp src/tinystr.cpp src/tinyxml.cpp src/tinyxmlerror.cpp src/tinyxmlparser.cpp src/wall.cpp src/AAAselect_xmlMain.cpp)#src/AAAstatisticRoomNameMain.cpp only one main.cpp
#add_executable(ModelWash.out ${PROJECT_SOURCE_DIR}/src)#生成可執行文件
#編譯選項
#add_definition("-Wall -g")
#添加依賴
add_dependencies(target-name depend-target1 depend-target2 ...)

附加:設置編譯選項的方式:

      1、add_compile_options(-std=c++11) ,設置的編譯選項是對所有編譯器都起作用的

      2、set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")  ,設置僅僅針對c++編譯器編譯器添加

      3、使用ADD_DEFINITION添加,爲源文件的編譯添加由-D定義的標誌。

3、運行指令

在終端中打開build文件夾

cmake ../  #../是爲了回到上一級CMakeLists文件所在文件夾下cmake 生成 makefile(其中包含了很多源文件編譯命令)

make #根據上一步生成的makefile文件中命令對大型程序進行編譯

然後區可執行文件目錄 bin中找到之前定義的可執行文件 ModelWash.out

cd ../ #返回上一級,

cd bin

./ModelWash.out

4、番外篇之make和cmake命令的差別

make:makefile中包含了很多源文件的編譯(gcc指令)語句,make就是根據makefile中的命令編譯大型程序,但是跨平臺的時候,makefile需要重新修改,比較麻煩,此時就出現了cmake工具

cmake:根據編寫的簡單的CMakeLists.txt文件通過cmake命令生成編譯需要的CMakefile,前者寫起來比後者簡單得多,後續再用make命令編譯

make clean 是將之前編譯過程產生的可執行文件或者其他中間文件清楚掉,一般是重新編譯之前執行該命令

 

#如有錯誤,請留言指出,謝謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章