1. 程式人生 > 實用技巧 >【C++/Qt】CMake多檔案編譯

【C++/Qt】CMake多檔案編譯

利用cmake分別在Linux和Windows下的編譯流程在上一篇文章中已經提及,本篇便來說一下CMake文件的撰寫。

本篇文章涉及的檔案路徑如下:

#cmake版本
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.1)

#專案名稱
PROJECT(Iterator)

#讓cmake自動去尋找Qt5
FIND_PACKAGE(Qt5 COMPONENTS Widgets REQUIRED)

#採用C++11標準
SET(CMAKE_CXX_STANDARD 11)

# 查詢當前目錄下的所有原始檔
# 並將名稱儲存到 DIR_SRCS 變數
AUX_SOURCE_DIRECTORY(. DIR_SRCS)
# 新增標頭檔案路徑 INCLUDE_DIRECTORIES("${PROJECT_SOURCE_DIR}" ./IteratorFunction ./IteratorWidget) #新增所有的原始檔
#####注意,這裡檔案路徑要按照實際路徑撰寫,其中CMakeLists.txt為起點##### SET(Iterator_SOURCES main.cpp IteratorWidget
/IteratorWidget.cpp IteratorFunction/IteratorFunction.cpp IteratorFunction/Aitken.cpp IteratorFunction
/NewtonOriginal.cpp IteratorFunction/NewtonDownhill.cpp IteratorFunction/OnePoint.cpp IteratorFunction/TwoPoint.cpp ) #新增所有的標頭檔案 SET(Iterator_HEADERS IteratorWidget/IteratorWidget.h IteratorFunction/IteratorFunction.h IteratorFunction/Aitken.h IteratorFunction/NewtonOriginal.h IteratorFunction
/NewtonDownhill.h IteratorFunction/OnePoint.h IteratorFunction/TwoPoint.h ) #呼叫預編譯器moc,需要使用 QT5_WRAP_CPP巨集 QT5_WRAP_CPP(Iterator_HEADERS_MOC ${Iterator_HEADERS}) #這些生成的中間檔案都會在build目錄下,這樣的話,編譯器則不能定位由uic程式產生的諸如_ui_mainwindow.h等檔案。所以,我們需要把build目錄新增到包含目錄中 INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR}) #生成可執行檔案 ADD_EXECUTABLE(Iterator ${Iterator_SOURCES} ${Iterator_HEADERS_MOC} ) #為target新增需要連結的共享庫 TARGET_LINK_LIBRARIES(Iterator ${Qt5Widgets_LIBRARIES})