linux工程構建:make,cmake


make


 

 

 

cmake


CMake是一個比make更高級的編譯配置工具,它可以根據不同平台、不同的編譯器,生成相應的Makefile或者vcproj項目。通過編寫CMakeLists.txt,可以控制生成的Makefile,從而控制編譯過程。CMake自動生成的Makefile不僅可以通過make命令構建項目生成目標文件,還支持安裝(make install)、測試安裝的程序是否能正確執行(make test,或者ctest)、生成當前平台的安裝包(make package)、生成源碼包(make package_source)、產生Dashboard顯示數據並上傳等高級功能,只要在CMakeLists.txt中簡單配置,就可以完成很多復雜的功能,包括寫測試用例。如果有嵌套目錄,子目錄下可以有自己的CMakeLists.txt。

外部編譯
外部編譯,一個最大的好處是,對於原有的工程沒
有任何影響,所有動作全部發生在編譯目錄。通過這一點,也足以說服我們全部采用外部編
譯方式構建工程。

#確定cmake最低版本需求
cmake_minimum_required(VERSION 3.0.0)

#打印
MESSAGE(STATUS "This is install dir " ${CMAKE_INSTALL_PREFIX})

#確定工程名
#(這一行會引入兩個變量XXX_BINARY_DIR (二進制文件保存路徑)和 #XXX_SOURCE_DIR(源代碼保存路徑))
project(XXX)

#添加需要的庫
set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "/usr/local/share/OpenCV")
find_package(OpenCV 3.2.0 REQUIRED)

#添加需要的頭文件
include_directories(include)
include_directories(${OpenCV_INCLUDE_DIRS})
include_directories(/usr/local/cuda-8.0/include/)

#確定編譯語言
#add_definitions(-std=c++11)
set(CMAKE_CXX_STANDARD 11)

#設定變量
ADD_DEFINITIONS( -DGPU -DCUDNN )

#添加源代碼
aux_source_directory(${CMAKE_CURRENT_LIST_DIR}/src src)

#編譯動態庫並鏈接庫文件
link_directories(${PROJECT_SOURCE_DIR})
add_library(plate_recognition SHARED ${SRC})
target_link_libraries(plate_recognition ${OpenCV_LIBS})
target_link_libraries(plate_recognition -llianghao  -lpthread -lm -lstdc++)

#生成可執行文件
link_directories(${PROJECT_SOURCE_DIR})
add_executable(Test ${SRC})
target_link_libraries(Test ${OpenCV_LIBS})
target_link_libraries(Test -llianghao  -lpthread -lm -lstdc++)

#make install
SET(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR})

INSTALL(TARGETS myengine
    DESTINATION ../assets/bin/
   )

 

項目刪除:
CMake 默認不提供 uninstall 這個 target,想要的話,輸入:

 
        

xargs rm < install_manifest.txt

對於不修改配置的項目足夠了,manifest.txt 是CMake 生成的安裝文件列表。

 

參考:

使用CMake組織C++工程

 

一些書:

深入學習cmake

《cmake實踐》

《mastering cmake》

CMake學習之路


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM