假定有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為../。
黨章學習小結
在新的歷史條件下,學習黨章,就是要更好地保持黨員先進性,樹立黨員意識,充分發揮黨員的先鋒模範作用,就是要加強黨性鍛鍊,提高黨性修養。作為一名黨員,在政治上要有堅定的理想信念。在任何時候 任何情況下,都要確保在理想信念上不猶疑 不含糊 不動搖,要把堅定的理想信念化作全面建設小康社會的實際行動。黨員的政...
黨校學習小結
最後,通過學習我堅定了自己的共產主義信念。歷史唯物主義認為,理想信念是人們的世界觀在奮鬥目標上的集中體現。人是需要有理想信念的,因為理想信念是人的精神支柱和精神動力,不同的理想信念決定著不同的人生追求和思想境界。保持共產黨員的先進性,首先必須堅定共產主義的理想信念。堅定的共產主義理想不是與生俱來的,...
跟班學習小結
楊錦秀按照縣委組織部的統一部署和安排,我有幸到縣民政局跟班學習。學習期間,我在縣委組織部和縣民政局領導的關心指導下,時刻牢記這次跟班學習的目的和要求,紮實工作,主動求教,留心觀察,認真思考,各方面都有新的進步。現就自己跟班學習期間的情況總結如下。一 遵章守紀,勤奮工作 做到按時上下班,認真按照縣民政...