original url:
http://blog.csdn.net/xizero00/article/details/50975156
举个例子来说,假如想编译自己写的基于OpenCV的程序那么
如果你是使用的是ubuntu的话,就很方便。
如果你使用gflags和glog的话那么执行安装:
- sudo apt-get install libgoogle-glog-dev libflags-dev
如果你还使用protobuf那么执行安装
- sudo apt-get install protobuf-compiler libprotobuf-dev
如果你使用boost
- sudo apt-get install libboost-all-dev
如果你使用opencv
- sudo apt-get install libopencv-dev
接下来安装正角:
- sudo apt-get install cmake cmake-qt-gui
然后自己写自己的CMakeLists.txt,内容如下:
- cmake_minimum_required(VERSION 2.8)
- project(Disp)
-
- set(LINKER_LIBS "")
-
- # opencv
- find_package(OpenCV REQUIRED)
- include_directories(${OpenCV_INCLUDE_DIRS})
- list(APPEND LINKER_LIBS ${OpenCV_LIBS})
-
- # glog
- # 这是从caffe中获取的
- include("cmake/FindGlog.cmake")
- #find_package(lib_glog REQUIRED)
- include_directories(SYSTEM ${GLOG_INCLUDE_DIRS})
- list(APPEND LINKER_LIBS ${GLOG_LIBRARIES})
-
- # gflags
- # 这是从caffe中获取的
- include("cmake/FindGFlags.cmake")
- #find_package(GFlags REQUIRED)
- include_directories(SYSTEM ${GFLAGS_INCLUDE_DIRS})
- list(APPEND LINKER_LIBS ${GFLAGS_LIBRARIES})
-
- # 加入你自己编译成可执行文件的名称以及对应的代码
- add_executable(1 1.cpp)
- # 链接时候的库文件
- target_link_libraries(1 ${LINKER_LIBS})
此时呢,你需要将caffe目录下的cmake/Modules/中的
FindGlog.cmake和FindGFlags.cmake都复制到自己的项目中的cmake文件夹下
这样cmake就能自动找到glog以及gflags的头文件以及库文件了。
这里假设自己的代码文件就一个文件:1.cpp
然后执行cmke-gui
选择你自己的项目的目录configure一下。
勾选cmake界面的Grouped和Advanced
然后找到CMAKE下面的CMAKE_BUILD_TYPE,填入Debug即可设置项目为Debug模式,这样在你导入到eclipse的时候可以进行调试
如果不设置成Debug还可以设置为Release等模式。
当然如果你不喜欢图形界面也可以用cmake -DCMAKE_BUILD_TYPE=Debug /your/project/path 来生成makefile文件。
最后放出
FindGFlags.cmake和
FindGlog.cmake的代码,这样你就不需要下载这两个文件了,其实caffe里面给出很多可用的cmake文件。
- # - Try to find GFLAGS
- #
- # The following variables are optionally searched for defaults
- # GFLAGS_ROOT_DIR: Base directory where all GFLAGS components are found
- #
- # The following are set after configuration is done:
- # GFLAGS_FOUND
- # GFLAGS_INCLUDE_DIRS
- # GFLAGS_LIBRARIES
- # GFLAGS_LIBRARYRARY_DIRS
-
- include(FindPackageHandleStandardArgs)
-
- set(GFLAGS_ROOT_DIR "" CACHE PATH "Folder contains Gflags")
-
- # We are testing only a couple of files in the include directories
- if(WIN32)
- find_path(GFLAGS_INCLUDE_DIR gflags/gflags.h
- PATHS ${GFLAGS_ROOT_DIR}/src/windows)
- else()
- find_path(GFLAGS_INCLUDE_DIR gflags/gflags.h
- PATHS ${GFLAGS_ROOT_DIR})
- endif()
-
- if(MSVC)
- find_library(GFLAGS_LIBRARY_RELEASE
- NAMES libgflags
- PATHS ${GFLAGS_ROOT_DIR}
- PATH_SUFFIXES Release)
-
- find_library(GFLAGS_LIBRARY_DEBUG
- NAMES libgflags-debug
- PATHS ${GFLAGS_ROOT_DIR}
- PATH_SUFFIXES Debug)
-
- set(GFLAGS_LIBRARY optimized ${GFLAGS_LIBRARY_RELEASE} debug ${GFLAGS_LIBRARY_DEBUG})
- else()
- find_library(GFLAGS_LIBRARY gflags)
- endif()
-
- find_package_handle_standard_args(GFlags DEFAULT_MSG GFLAGS_INCLUDE_DIR GFLAGS_LIBRARY)
-
-
- if(GFLAGS_FOUND)
- set(GFLAGS_INCLUDE_DIRS ${GFLAGS_INCLUDE_DIR})
- set(GFLAGS_LIBRARIES ${GFLAGS_LIBRARY})
- message(STATUS "Found gflags (include: ${GFLAGS_INCLUDE_DIR}, library: ${GFLAGS_LIBRARY})")
- mark_as_advanced(GFLAGS_LIBRARY_DEBUG GFLAGS_LIBRARY_RELEASE
- GFLAGS_LIBRARY GFLAGS_INCLUDE_DIR GFLAGS_ROOT_DIR)
- endif()
将以上代码保存为
FindGFlags.cmake
- # - Try to find Glog
- #
- # The following variables are optionally searched for defaults
- # GLOG_ROOT_DIR: Base directory where all GLOG components are found
- #
- # The following are set after configuration is done:
- # GLOG_FOUND
- # GLOG_INCLUDE_DIRS
- # GLOG_LIBRARIES
- # GLOG_LIBRARYRARY_DIRS
-
- include(FindPackageHandleStandardArgs)
-
- set(GLOG_ROOT_DIR "" CACHE PATH "Folder contains Google glog")
-
- if(WIN32)
- find_path(GLOG_INCLUDE_DIR glog/logging.h
- PATHS ${GLOG_ROOT_DIR}/src/windows)
- else()
- find_path(GLOG_INCLUDE_DIR glog/logging.h
- PATHS ${GLOG_ROOT_DIR})
- endif()
-
- if(MSVC)
- find_library(GLOG_LIBRARY_RELEASE libglog_static
- PATHS ${GLOG_ROOT_DIR}
- PATH_SUFFIXES Release)
-
- find_library(GLOG_LIBRARY_DEBUG libglog_static
- PATHS ${GLOG_ROOT_DIR}
- PATH_SUFFIXES Debug)
-
- set(GLOG_LIBRARY optimized ${GLOG_LIBRARY_RELEASE} debug ${GLOG_LIBRARY_DEBUG})
- else()
- find_library(GLOG_LIBRARY glog
- PATHS ${GLOG_ROOT_DIR}
- PATH_SUFFIXES lib lib64)
- endif()
-
- find_package_handle_standard_args(Glog DEFAULT_MSG GLOG_INCLUDE_DIR GLOG_LIBRARY)
-
- if(GLOG_FOUND)
- set(GLOG_INCLUDE_DIRS ${GLOG_INCLUDE_DIR})
- set(GLOG_LIBRARIES ${GLOG_LIBRARY})
- message(STATUS "Found glog (include: ${GLOG_INCLUDE_DIR}, library: ${GLOG_LIBRARY})")
- mark_as_advanced(GLOG_ROOT_DIR GLOG_LIBRARY_RELEASE GLOG_LIBRARY_DEBUG
- GLOG_LIBRARY GLOG_INCLUDE_DIR)
- endif()
-
将以上代码保存为
FindGlog.cmake
通过CMake管理自己的项目的编译是不是觉得很方便呢,自动生成makefile文件,而且还能够处理头文件以及库文件的问题,感觉世界清爽多了,可以安静地写自己的程序了。