CMake 工程呼叫 Makefile 編譯專案

2021-08-27 11:30:05 字數 3437 閱讀 7842

本文主要介紹如何將乙個依賴 makefile 專案(midg)移植到 cmake 上。

首先介紹專案檔案結構,檔案主要由三個目錄組成

3rdparty

include

src其中,3rdparty中包含兩個外部函式庫,即metisparmetis,生成兩個靜態鏈結庫libmetis.alibparmetis.asrc包含專案所有源程式,include則包含了全部標頭檔案。

因此,我們在根目錄下 cmake 配置檔案內容如下

cmake_minimum_required(version 3.1)

project(dgom)

set(cmake_c_flags "$")

set(cmake_c_compiler /usr/local/bin/mpicc)

set(cmake_cxx_compiler /usr/local/bin/mpicxx)

# 3rdparty library

# build with original makefile

set(metis_library $/lib/libmetis.a)

set(parmetis_library $/lib/libparmetis.a)

add_custom_target(build_metis all

command $

working_directory $/3rdparty/parmetis-3.1/metislib/

comment "original metis makefile target")

add_custom_target(build_parmetis all

command $

working_directory $/3rdparty/parmetis-3.1/parmetislib/

comment "original parmetis makefile target")

add_library(metis static imported)

add_library(parmetis static imported)

set_target_properties(metis properties imported_location_noconfig "$")

set_target_properties(parmetis properties imported_location_noconfig "$")

add_dependencies(metis build_metis)

add_dependencies(parmetis build_parmetis)

# source file

add_subdirectory(src)

set(cmake_c_compiler mpicc)set(cmake_cxx_compiler mpicxx)負責選擇專案編譯器,本專案中選擇mpich2metisparmetis第三方庫採用原始 makefile 編譯,將編譯好的靜態庫檔案新增到專案中

3rdparty目錄如下

./

└── parmetis-3.1

├── metislib

├── manual

└── parmetislib

metislibparmetislib分別為兩個不同的網格劃分庫。原始make命令分別進入兩個專案所在目錄使用make命令即可。因此,在主目錄cmakelists.txt中呼叫make命令編譯庫函式,主要步驟如下:

add_custom_target(build_metis all

command $

working_directory $/3rdparty/parmetis-3.1/metislib/

comment "original metis makefile target")

add_custom_target(build_parmetis all

command $

working_directory $/3rdparty/parmetis-3.1/parmetislib/

comment "original parmetis makefile target")

add_custom_target通過使用者給定的指令來增加乙個新的編譯目標。all代表該目標新增到預設編譯目標中,因此每次編譯都會執行。

這兩個目標為外部庫imported,而非專案自己編譯的

add_library(metis static imported)

add_library(parmetis static imported)

set_target_properties(metis properties imported_location_noconfig "$")

set_target_properties(parmetis properties imported_location_noconfig "$")

確保首先執行編譯過程

add_dependencies(metis build_metis)

add_dependencies(parmetis build_parmetis)

原始檔編譯時候需要標頭檔案路徑,並且與第三方庫進行鏈結

set(src_list

mesh2d.c utils.c loadbalance2d.c facepair2d.c

parallelpairs.c buildmaps2d.c startup2d.c

maxwellsrun2d.c maxwellsmpi2d.c maxwellsdriver2d.c

maxwellsrhs2d.c initcpu2d.c)

add_executable(dgom2 $)

include_directories("../include")

target_link_libraries(dgom2 metis parmetis)

add_executable(dgom2 $)
include_directories("../include")
target_link_libraries(dgom2 metis parmetis)

cmake構建qt工程

如何選擇?using cmake to build qt projects 一文中說 儘管如此,如果簡單qt的工程都不知道怎麼用 cmake 構建,複雜的工程,就更不知道如何使用 cmake 了。還是從簡單的學起吧 include include qdebug int main int argc,c...

cmake編譯工程列子

理解 cmake是乙個跨平台編譯器工具,它可以生成各種編譯檔案。本文主要是將如何通過cmake來編譯c 工程。它採取out of source 即中間產物與原始碼分離 方式。在c 中,可以認為cmake是將所有原始檔.h和.cpp都放在同乙個目錄下,來進行編譯和鏈結,最終生成工程。1 工程目錄結構 ...

QtCreator建立CMake工程

確保cmake已經安裝並且新增到了系統環境變數 qtcreator會自動檢測 或者qtcreator中手動新增。如果使用vs編譯器的話,需要準備 1 vs已經安裝。2 win10 sdk 本人使用的是win10 已經安裝。3 將d qt qt5.9.6 tools qtcreator bin 根據自...