1、cmake_minimum_required(VERSION 2.8)
cmake最低版本,如果CMake的当前版本低于指定的版本,它会停止处理工程文件,并报告错误
2、project(<projectname> [languageName1 languageName2 ...])
projectname:工程名
languageName:指定工程可以支持的语言。如project(Hello,C CXX),CXX即是C++
3、set( CMAKE_CXX_FLAGS "-std=c++11" )
添加c++11标准支持
4、find_package(包的名称及最低版本)
找到后面需要库和头文件的包
例如find_package(OpenCV 2.4.3 REQUIRED)
5、include_directories("路径")
头文件
#include_directories(
${PROJECT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}/include
${EIGEN3_INCLUDE_DIR}
6、set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
设置路径(下面生成共享库的路径),即生成的共享库在工程文件夹下的lib文件夹中
7、add_library(${PROJECT_NAME} SHARED src/cpp文件名 …… )
创建共享库(把工程内的cpp文件都创建成共享库文件,方便通过头文件来调用)
这时候只需要cpp,不需要有主函数
${PROJECT_NAME}是生成的库名 表示生成的共享库文件就叫做 lib工程名.so
也可以专门写cmakelists来编译一个没有主函数的程序来生成共享库,供其它程序使用
8、target_link_libraries(${PROJECT_NAME} /usr/lib/i386-linux-gnu/libboost_system.so )
链接库,把刚刚生成的${PROJECT_NAME}库和所需的其它库链接起来
9、set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
设置可执行文件生成路径
10、add_executable(要生成的可执行文件名 从工程目录下写起的主函数文件名)
可执行文件生成,凡是要编译的源文件都需要列举出来。
add_executable(hello_world src/hello_world.cpp src/main.cpp)
12、set(<variable> <value> [[CACHE <type> <docstring> [FORCE]] | PARENT_SCOPE]
)
将一个CMAKE变量设置为给定值
SET(CMAKE_BUILD_TYPE Release)
设置编译方式为Release,如果要求有比较高德运行方式,建议选择Release
如:
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Release)
13、AUX_SOURCE_DIRECTORY(src DIR_SRCS)
源文件目录
14、cmake_policy
管理CMake的策略设置
C++创建工程如下:
$mkdir hellotest
$cd hellotest
$mkdir bin #可执行文件存放路径
$mkdir lib #生成的.so文件存放路径
$mkdir include #头文件存放路径
$mkdir src #源文件存放路径
$mkdir build #编译文件存放路径
$touch CMakeLists.txt
$cd build
$cmake ..
$make
转载:Cmake写法 https://blog.csdn.net/zhanghenan123/article/details/81952015
Opencv注意事项 https://blog.csdn.net/u012816621/article/details/51732932
注意事项:在引入opencv的一些注意事项
1、find_package(OpenCV REQUIRED)中的OpenCV一定要遵循该大小写。
因为该句话是根据OpenCV作为前缀自动去/usr/local/share/OpenCV(如果你的opencv安装时,默认前缀设置为:/usr/local时)文件夹中去找OpenCVConfig.cmake,OpenCV-config.cmake 两个文件,进而确定你要引入的opencv头文件和库函数在哪里。
一份模板,大家根据自己日后需求一步一步添加。
# cmake最低版本,如果CMake的当前版本低于指定版本,它会停止处理工程文件,并报告错误。
cmake_minimum_required (VERSION 2.8.8)
# 工程名
project (tf_example)
# 添加C++11标准支持
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -W")
link_directories(./lib)
# 找到后面需要的库和头文件的包
find_package(OpenCV REQUIRED)
# 头文件
include_directories(
/home/zou/code/tensorflow
/home/zou/code/tensorflow/bazel-genfiles
/home/zou/code/tensorflow/bazel-bin/tensorflow
/usr/local/include/eigen3
/home/zou/code/tensorflow/tensorflow/contrib/makefile/downloads/absl
/usr/local/include/google/protobuf
/home/zou/code/tensorflow/tensorflow/contrib/makefile/downloads/nsync/public
${OpenCV_INCLUDE_DIRS}
)
# 添加可执行文件 (目标生成名字,可执行文件夹)
add_executable(tf_test main_v1.cc)
# 目标库 (生成 依赖lib)
target_link_libraries(tf_test tensorflow_cc tensorflow_framework ${OpenCV_LIBS})