cmake 實例分析,cmake入門

樣例1

假設一個main.cpp(),在同文件夾下include 了A.h,然後A.cpp包含了B.h,那麼這個項目的cmake可以這麼寫:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
CMAKE_POLICY(VERSION 2.8)

FIND_PACKAGE(OpenCV REQUIRED)
上面指明瞭cmake的版本

然後find_package表明需要用到opencv的庫,如果需要其他其他庫的話就加進去就好了

aux_source_directory(. DIR_SRCS)
這個是把 . (當前文件夾)的所有文件加進DIR_SRCS裏

然後message可以打印一下DIR_SRCS這個變量。

MESSAGE("PROJECT_SOURCE_DIR : " ${DIR_SRCS})

結果是當前文件夾下面的所有cpp

set(CMAKE_CXX_FLAGS "-std=c++11")
這個表明用c++11,不要也行,但是據說要厲害一點

添加生成可執行文件

ADD_EXECUTABLE(Launch ${DIR_SRCS})
TARGET_LINK_LIBRARIES(Launch ${OpenCV_LIBS} )
添加鏈接,用到了opencv就把lib加進去

全部內容如下:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
CMAKE_POLICY(VERSION 2.8)

FIND_PACKAGE(OpenCV REQUIRED)

INCLUDE_DIRECTORIES(
${PROJECT_SOURCE_DIR}
${OpenCV_INCLUDE_DIRS}
)

#source directory
aux_source_directory(. DIR_SRCS)


MESSAGE("PROJECT_SOURCE_DIR : " ${DIR_SRCS})

set(CMAKE_CXX_FLAGS "-std=c++11")

ADD_EXECUTABLE(Launch ${DIR_SRCS})
TARGET_LINK_LIBRARIES(Launch ${OpenCV_LIBS} )

MESSAGE("OpenCV_LIBS : " ${OpenCV_LIBS})
 



樣例2

SET(FLY_CAPTURE_SDK_INCLUDE /usr/include/flycapture)
SET(FLT_CAPTURE_SDK_LIBS /usr/lib/libflycapture.so) 

INCLUDE_DIRECTORIES(
  ${OpenCV_INCLUDE_DIRS}
  ${FLY_CAPTURE_SDK_INCLUDE}
)


如果要包含一些其他庫

用set手動設置頭文件位置和.so文件,注意.so文件是動態鏈接文件,win下是.dll,.a文件是靜態鏈接文件,許多.o組成.a

INCLUDE_DIRECTORIES表示在哪裏去找include文件

ADD_LIBRARY(acfDetec acfDetect.cpp)
ADD_LIBRARY(convTri convTri.cpp)
...

將一些cpp加入library,這些就會在cmake的位置生成.a文件,這些.a文件是可以直接拷貝給其他程序調用的,就是一些庫文件,用法下一篇博客會講


ADD_EXECUTABLE(subcat main.cpp)
TARGET_LINK_LIBRARIES(subcat acfDetec convTri gradientMex imPad imResample rgbConvert wrappers ${OpenCV_LIBS} ${FLT_CAPTURE_SDK_LIBS})
然後這個就把上面生成的一些.a鏈接進去,其實應該像樣例1一樣寫的,這樣寫太麻煩,注意第一個是可執行文件名


全部內容

CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
CMAKE_POLICY(VERSION 2.8)

#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -mfpmath=sse -mmmx -msse -msse2 -msse3")
#set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wall")

FIND_PACKAGE(OpenCV REQUIRED)

SET(FLY_CAPTURE_SDK_INCLUDE /usr/include/flycapture)
SET(FLT_CAPTURE_SDK_LIBS /usr/lib/libflycapture.so) 

INCLUDE_DIRECTORIES(
  ${OpenCV_INCLUDE_DIRS}
  ${FLY_CAPTURE_SDK_INCLUDE}
)



ADD_LIBRARY(acfDetec acfDetect.cpp)
ADD_LIBRARY(convTri convTri.cpp)
ADD_LIBRARY(gradientMex gradientMex.cpp)
ADD_LIBRARY(imPad imPad.cpp)
ADD_LIBRARY(imResample imResample.cpp)
ADD_LIBRARY(rgbConvert rgbConvert.cpp)
ADD_LIBRARY(wrappers wrappers.cpp)
#ADD_LIBRARY()


ADD_EXECUTABLE(subcat main.cpp)
TARGET_LINK_LIBRARIES(subcat acfDetec convTri gradientMex imPad imResample rgbConvert wrappers ${OpenCV_LIBS} ${FLT_CAPTURE_SDK_LIBS})
 







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章