1. 程式人生 > >標準cmake模板(將原始檔做成庫)

標準cmake模板(將原始檔做成庫)

開發十年,就只剩下這套架構體系了! >>>   

 版權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/qq_25254777/article/details/77989440
在多級目錄下,工程目錄的CMakeList.txt的模板,
1
  cmake_minimum_required( VERSION 2.8 )
project( guoguo )

# 設定用debug還是release模式。debug允許斷點,而release更快
#set( CMAKE_BUILD_TYPE Debug )
set( CMAKE_BUILD_TYPE Release )

# 設定編譯選項
# 允許c++11標準、O3優化、多執行緒。match選項可避免一些cpu上的問題
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=native -O3 -pthread" )

# 常見依賴庫:cv, eigen, pcl
find_package( OpenCV REQUIRED )
#find_package( Eigen3 REQUIRED )
#find_package( PCL 1.7 REQUIRED )

#include_directories(${PCL_INCLUDE_DIRS})
#link_directories(${PCL_LIBRARY_DIRS})
#add_definitions(${PCL_DEFINITIONS})

# 二進位制檔案輸出到bin
set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin )
# 庫輸出到lib
set( LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib )

# 標頭檔案目錄
include_directories(
    ${PROJECT_SOURCE_DIR}/include
    )

# 原始檔目錄
add_subdirectory( ${PROJECT_SOURCE_DIR}/src/ )
add_subdirectory( ${PROJECT_SOURCE_DIR}/experiment/ )  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
這樣就會將可執行檔案放入bin資料夾,將產生的庫檔案放入lib資料夾中,還要就是新增子目錄的時候,一定要保證目錄裡面繼續包含CMakeLists.txt,要不然會報錯。還有include_directories()必須加上,如果不加就會提示找不到標頭檔案。 
在src資料夾中存放的是原始檔和CMakeLists.txt,同時你可以在這個cmakelists.txt中進行設定,把原始檔做成庫檔案。

set(Lib_src hello.cpp)
add_library(libhello ${Lib_src})
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
1
2
3
最後一行是為了將.a庫檔名字改成.libhello的名字,如果不加這一句就會是liblibhello.a
那麼在你放main函式的.cpp檔案,我們暫時可以把這個資料夾定義為experience,那麼這個資料夾中就包含.cpp檔案和cmakelists.txt檔案,其中的cmakelists
1
2
add_executable(hello main.cpp)
target_link_libraries(hello libhello)
1
2
因為我這裡引用的庫檔案,所以要包含
target_link_libraries(hello libhello)
1
2

當然我們也可以不引用庫檔案,因為我們手中擁有這它的標頭檔案和原始檔,多麼質樸的東西,當然可以直接使用啦。

include_directories(${PROJECT_SOURCE_DIR}/include)

add_executable(hello main.cpp ${PROJECT_SOURCE_DIR}/src/hello.cpp)
1
2
3
當然加上標頭檔案的目錄啦,然後詳細的列好所有需要用到的.cpp檔案的路徑。 
這樣你就做好了。 
當然如果你想生成動態庫檔案只需要在src 中改一點點如:

add_library(libhello SHARED ${LIB_SRC})
1
對,就是加了SHARE 是不是很簡單。
--------------------- 
作者:嗨小方 
來源:CSDN 
原文:https://blog.csdn.net/qq_25254777/article/details/77989440 
版權宣告:本文為博主原創文章,轉載請