其他分享
首页 > 其他分享> > 【cmke】cmake相关的记录

【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

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})

包含我们开发的源文件

# 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