【cmke】cmake相关的记录
作者:互联网
之前在电脑本地的一些记录,记录遍布各个文件夹,需要的时候查找翻阅不便,现归纳到此。
单文件的cmake
1、内部编译
hello.cpp
#include <iostream>
using namespace std;
int main(int argc, char **argv) {
cout << "Hello test!" << endl;
return 0;
}
CMakeLists.txt
# 声明要求的cmake最低版本
cmake_minimum_required( VERSION 2.8 )
# 声明一个cmake工程
project(Hello)
# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( hello hello.cpp)
用cmake对工程进行编译,cmake后面有一个英文输入法的句号,表示在当前目录下进行cmake:
cmake .
用make命令对工程进行编译:
make
运行:
./hello
想新增一个可执行文件,在CMakeLists.txt中添加一行'add_executable'
命令即可。
2、外部编译
新建中间文件夹:mkdir build
进入该文件夹:cd build
用cmake进行编译(两个英文输入法的句号表示对父目录进行cmake编译):cmake ..
用make进行编译:make
,这样cmake产生的中间文件就会生成在build文件夹中,与源代码分开,当发布源代码时,只要把build
文件夹删掉即可。
3、使用库
Linux中,库文件分成 静态库
和共享库
两种。
静态库以.a
作为后缀名,静态库每次调用都会生成一个副本。
共享库以.so
作为后缀名,共享库只有一个副本。
在CMakeLists.txt中添加add_library(hello_shared SHARED libHello.cpp)
,此时得到的文件就是libhello_shared.so
。
4、添加头文件
为了让别人或自己使用这个库,我们需要提供一个头文件,说明这些库里面都有些什么。
因此,对于库的使用者,只要拿到了头文件和库文件,就可以调用这个库。
完整程序demo
-
libHello.cpp
//这是一个库文件 #include <iostream> using namespace std; void printHello(){ cout << "Hello !" << endl; }
-
libHello.h
#ifndef LIBHELLO_H_ #define LIBHELLO_H_ // 打印一句Hello的函数 void printHello(); #endif
-
main.cpp
#include "libHello.h" int main(int argc, char **argv) { printHello(); return 0; }
-
CMakeLists.txt
# 声明要求的cmake最低版本 cmake_minimum_required(VERSION 2.8) # 声明一个 cmake 工程 project(Hello) # 设置编译模式 set(CMAKE_BUILD_TYPE "Debug") # 添加一个可执行程序 # 语法:add_executable( 程序名 源代码文件 ) add_executable(hellotest hello.cpp) # 添加hello库 add_library(hello libHello.cpp) # 共享库 add_library(hello_shared SHARED libHello.cpp) # 添加可执行程序调用hello库中函数 add_executable(useHello main.cpp) # 将库文件链接到可执行程序上 target_link_libraries(useHello hello_shared)
OpenCV 中的cmake学习使用
记录的一段CMakeLists.txt
cmake_minimum_required (VERSION 3.0)
PROJECT(Chapter2)
set (CMAKE_CXX_STANDARD 11)
IF(EXISTS ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
ENDIF()
# Requires OpenCV
FIND_PACKAGE( OpenCV 4.0.0 REQUIRED )
MESSAGE("OpenCV version : ${OpenCV_VERSION}")
ADD_EXECUTABLE( sample1 sample1.cpp )
TARGET_LINK_LIBRARIES( sample1 ${OpenCV_LIBS} ${CONAN_LIBS} )
ADD_EXECUTABLE( sample2 sample2.cpp )
TARGET_LINK_LIBRARIES( sample2 ${OpenCV_LIBS} ${CONAN_LIBS} )
ADD_EXECUTABLE( sample3 sample3.cpp )
TARGET_LINK_LIBRARIES( sample3 ${OpenCV_LIBS} ${CONAN_LIBS} )
ADD_EXECUTABLE( ${PROJECT_NAME} main.cpp )
TARGET_LINK_LIBRARIES( ${PROJECT_NAME} ${OpenCV_LIBS} ${CONAN_LIBS} )
cmake代码解读的记录
# Requires OpenCV
FIND_PACKAGE( OpenCV 4.0.0 REQUIRED )
# Show a message with the opencv version detected
MESSAGE("OpenCV version : ${OpenCV_VERSION}")
include_directories(${OpenCV_INCLUDE_DIRS})
link_directories(${OpenCV_LIB_DIR})
-
这段代码搜索OpenCV依赖项,FIND_PACKAGE能够查找依赖项、所需的最低版本以及该依赖是必须还是可选的。此例中我们查找4.0.0或更高版本的opencv,并声明它是必需包。
-
${OpenCV_VERSION}是CMake用来存储OpenCV包版本的变量。
-
OpenCV CMake 的模块将这些数据保存在${OpenCV_INCLUDE_DIRS}和${OpenCV_LIB_DIR}变量中,并非所有的平台都需要这些命令行,因为这些路径通常位于环境中。
包含我们开发的源文件
# Create a variable called SRC
SET(SRC main.cpp)
# Create our executable
ADD_EXECUTABLE(${PROJECT_NAME} ${SRC})
# Link our library
TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${OpenCV_LIBS})
这边的意思是用SRC
这个变量来代替main.cpp
,下次要使用main.cpp
的使用就可以用SRC
这个参数了。
标签:cmake,记录,OpenCV,add,cmke,cpp,hello,LIBS 来源: https://www.cnblogs.com/Balcher/p/16411002.html