cMake學習小結

2021-03-04 09:51:20 字數 4330 閱讀 9973

假定有vegagis工程,工程的目錄結構如下:

#--vegagis

# |--src 源檔案目錄

# |--gui 介面工程,輸出型別:dll,依賴於qt的qtcore、qtgui、qtxml

# |--pending 工程中的原始檔,不希望加入到工程中

# ## 為了實現跨平台執行,win32和linux目錄下實現的是同一套介面,win32不編譯linux目錄,linux下則不編譯win32目錄,但是工程中包含這兩個目錄

# |--win32 win32下的實現

# |--linux linux下的實現

# |--app 應用程式,輸出型別:exe,它依賴於gui

# |--include 安裝時標頭檔案輸出的目錄

# |--gui

# |--app

# |--bin 輸出路徑,存放dll和exe

# |--debug

# |--plugins

# |--build cmake的build路徑,存放生成的工程檔案等

#vegagis目錄下的cmakelists.txt

cmake_minimum_required(version 2.8)

#工程名

project(vegagis)

#工程檔案中使用相對路徑

set(cmake_suppress_regeneration 1)

set(cmake_use_relative_paths on)

#支援if(a) else()的寫法

set(cmake_allow_loose_loop_constructs on)

#定義工程的頂級路徑

set(projdir $)

#定義源檔案目錄

set(srcdir $/src)

#設定輸出路徑

set(executable_output_path $/bin)

set(library_output_path $/bin)

#設定安裝路徑

set(cmake_install_prefix $/bin)

#定義標頭檔案安裝目錄

set(vgis_include_dir $/headers)

#根據作業系統不同而設定不同的路徑

if(win32)

set(gdal_hdrs "e:/lib/gdal/include")

else()

set(gdal_hdrs "/home/sunsc/gdal/")

endif()

#設定標頭檔案的引用路徑

include_directories($)

#設定引用庫路徑

set(libs $)

link_directories($)

#設定依賴庫qt4

set(qt_min_version 4.5.2)

find_package(qt4 $ ***ponents qtcore qtgui qtxml required)

include($)

#巨集,實現visio studio的目錄分組(過濾器)功能

macro(source_group_by_dir source_files)

if(msvc)

set(sgbd_cur_dir $)

foreach(sgbd_file $})

string(regex replace $)

string(regex replace1sgbd_group_name $)

string(***pare equal $ $ sgbd_nogroup)

string(replacesgbd_group_name $)

if(sgbd_nogroup)

set(sgbd_group_name "//")

endif(sgbd_nogroup)

source_group($ files $)

endforeach(sgbd_file)

endif(msvc)

endmacro(source_group_by_dir)

#新增子目錄

add_subdirectory(src)

#vegagis/src目錄下的cmakelists.txt

add_subdirectory(gui)

add_subdirectory(app)

#新增依賴關係

add_dependencies(app gui)

#vegagis/src/gui目錄下的cmakelists.txt

set(target_name gui)

#預定義巨集,-d選項

add_definitions(-dvmap_gui_lib)

#ui檔案

set(gui_uis vmapmainwindow.ui)

#原始檔型別為*.h*和*.c*

file(glob_recurse gui_srcs $/*.c* $/*.h*)

#file目前還不支援類似exclude的特性,所以pending中的檔案在上一語句中葉包括了,我們刪除它

file(glob pending $/pending/*)

list(remove_item gui_srcs $) #新生成的gui_srcs就不包括pending目錄的原始檔了

#參與qt moc的標頭檔案

file(glob_recurse gui_moc_hdrs vmapview.h transformlistener.hpp)

#設定資源qrc檔案

set (gui_rccs ui.qrc)

qt4_wrap_ui(gui_uis_h $)

qt4_wrap_cpp(gui_moc_srcs $)

qt4_add_resources(gui_rcc_srcs $)

#由於.ui檔案輸出路徑是在build目錄下,所以需要新增$目錄

include_directories($/gui $)

#設定需要加入到工程中,但是不需要編譯的原始檔

if (win32)

file(glob_recurse platform_src "$/linux/*")

else()

file(glob_recurse platform_src "$/win32/*")

endif()

file(glob_recurse exclude_src $)

set_source_files_properties($ properties header_file_only true) #設定源檔案屬性為不參與編譯

#進行源**分組

source_group_by_dir(gui_srcs)

#動態鏈結庫

add_library($ shared $ $ $ $)

target_link_libraries($ $)

#vegagis/src/app下的cmakelists.txt

set(target_name app)

set(app_uis vmapmainwindow.ui)

file(glob_recurse app_srcs $/*.c* $/*.h*)

set (app_moc_hdrs vmapmainwindow.h)

set (app_rccs vmapmainwindow.qrc)

qt4_wrap_ui(app_uis_h $)

qt4_wrap_cpp(app_moc_srcs $)

qt4_add_resources(app_rcc_srcs $)

#新增標頭檔案

include_directories($ $/apps/qt/$)

#原始檔分組

source_group_by_dir(app_srcs)

#exe應用程式

add_executable($ $ $ $ $)

#target_link_libraries語句必須放到add_executable語句之後,否則引起鏈結錯誤

target_link_libraries($ $ gui)

#其他#1、輸出路徑的問題

#如果要修改輸出路徑,通常採用set(library_output_path ***)即可,但是在win32下,會自動放到$/debug/release目錄下,比如有乙個外掛程式,希望在輸出目錄的plugins子目錄下,但是如果設定為set(library_output_path ***/plugins),則檔案輸出目錄為$/plugins/debug,這顯然不是我們希望的。做法是設定prefix,如set_target_properties(abc properties prefix plugins/)。同理,如果輸出路徑不管debug、release都放置一樣,則設定prefix為../。

黨章學習小結

在新的歷史條件下,學習黨章,就是要更好地保持黨員先進性,樹立黨員意識,充分發揮黨員的先鋒模範作用,就是要加強黨性鍛鍊,提高黨性修養。作為一名黨員,在政治上要有堅定的理想信念。在任何時候 任何情況下,都要確保在理想信念上不猶疑 不含糊 不動搖,要把堅定的理想信念化作全面建設小康社會的實際行動。黨員的政...

黨校學習小結

最後,通過學習我堅定了自己的共產主義信念。歷史唯物主義認為,理想信念是人們的世界觀在奮鬥目標上的集中體現。人是需要有理想信念的,因為理想信念是人的精神支柱和精神動力,不同的理想信念決定著不同的人生追求和思想境界。保持共產黨員的先進性,首先必須堅定共產主義的理想信念。堅定的共產主義理想不是與生俱來的,...

跟班學習小結

楊錦秀按照縣委組織部的統一部署和安排,我有幸到縣民政局跟班學習。學習期間,我在縣委組織部和縣民政局領導的關心指導下,時刻牢記這次跟班學習的目的和要求,紮實工作,主動求教,留心觀察,認真思考,各方面都有新的進步。現就自己跟班學習期間的情況總結如下。一 遵章守紀,勤奮工作 做到按時上下班,認真按照縣民政...