# Compile project with GCC & CMAKE & MAKE ###### tags: `Linux` > 紀錄linux下編譯c++步驟 [TOC] ## :memo: Where do I start? > 定義資料夾結構[color=#3b75c6] ![](https://i.imgur.com/UfQkxi0.png) :::danger build, include, src, test請自行建立 ::: :::info - 需手動配置 - include => 放置.h標頭檔 - src => 放置.cpp檔 <font color="#f00">(**須配置CMakeLists.txt**)</font> - test => 主程式(測試程序) <font color="#f00">(**須配置CMakeLists.txt**)</font> - / =>專案根目錄 <font color="#f00">(**須配置CMakeLists.txt**)</font> - 自動生成 - bin => 輸出/執行路徑 - lib => 編譯完成產生的.lib檔 - 編譯用 - build => 編譯檔案路徑 ::: ## :memo: Cmake generator. > 要使用cmake 須在環境安裝cmake且須在專案裡定義cmakefile(CMakeLists.txt)[color=#3b75c6] ### 專案根目錄下的 CMakeLists.txt ```cmake=1 # 定義需求版本和工程名稱# cmake_minimum_required(VERSION 3.12) project(image_dynamic_range_adjustment) # cmake相關的一些設定# set(CMAKE_CXX_STANDARD 14) set( CMAKE_BUILD_TYPE "Release" ) set( CMAKE_CXX_FLAGS "-std=c++11 -O3" ) # 新增cmake_modules到CMAKE_MODULE_PATH路徑列表中和 list( APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake_modules ) # 設定可執行檔案與庫檔案的輸出路徑bin、lib # set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin ) set( LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib ) ###### 找第三方庫和新增標頭檔案 ###### # 無使用可直接省略 find_package( OpenCV 4.5.0 REQUIRED ) include_directories( ${OpenCV_INCLUDE_DIRS} ) ####### 自己寫的標頭檔案 ###### include_directories( ${PROJECT_SOURCE_DIR}/include ) #增加子目錄# add_subdirectory( src ) add_subdirectory( test ) ``` ### src 目錄下的 CMakeLists.txt ```cmake=1 # 生成lib # add_library(<自定義lib名稱> SHARED <你的檔案名稱>.cpp .... ) # 連結lib到執行檔案上 # target_link_libraries(<同上方定義lib名稱> ${THIRD_PARTY_LIBS} ) ``` ### test 目錄下的 CMakeLists.txt ```cmake=1 # 執行檔案 # add_executable( <定義執行程序名稱> <主程式名稱>.cpp) # 連結庫到執行檔案上 # 若無使用到opencv後方${OpenCV_LIBS} 不用加入 target_link_libraries(<同上方執行程序名稱> <同src定義lib名稱> ${OpenCV_LIBS}) ``` ## Compile ```bash= mkdir build cd build camke .. & make ``` ## Run ```bash= cd bin ./<執行程序名稱> ``` ## Sample ```bash= git clone https://github.com/LeosyHsu/cmake_template.git ``` --- ## Reference - Jason blog ➜ [CMake 入門/加入編譯選項](https://jasonblog.github.io/note/cmake/cmake_ru_9580_jia_ru_bian_yi_xuan_xiang.html)