文章目录
一、教程序列:
CMake解决c++11的phread库问题:undefined reference to `pthread_create’
C/C++的头文件分开写法和在gcc/g++、cmake、VSCode上运行结果
二、CMakeLists.txt不同需求内容
1.最简单的CMakeLists.txt
# project name
PROJECT(HELLO)
# 添加源代码文件到SRC_LIST变量中
AUX_SOURCE_DIRECTORY(. SRC_LIST)
# 生成可执行文件
ADD_EXECUTABLE(hello ${SRC_LIST})
执行的时候是./hello
2.使用c++11特性的CMakeLists.txt
基础模板:
# project name
PROJECT(HELLO)
# using C++11
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11")
# 添加源代码文件到SRC_LIST变量中
AUX_SOURCE_DIRECTORY(. SRC_LIST)
# 生成可执行文件
ADD_EXECUTABLE(hello ${SRC_LIST})
如使用C++11的
#include<thread>
- 加个
-pthread
# project name
PROJECT(HELLO)
# using C++11 and 线程
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 -pthread")
# 添加源代码文件到SRC_LIST变量中
AUX_SOURCE_DIRECTORY(. SRC_LIST)
# 生成可执行文件
ADD_EXECUTABLE(hello ${SRC_LIST})
- 使用包
Threads
和链接${CMAKE_THREAD_LIBS_INIT}
# project name
PROJECT(HELLO)
# using C++11
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11")
# find Threads线程库
FIND_PACKAGE(Threads)
# 添加源代码文件到SRC_LIST变量中
AUX_SOURCE_DIRECTORY(. SRC_LIST)
# 生成可执行文件
ADD_EXECUTABLE(hello ${SRC_LIST})
# after ADD_EXECUTABLE,为生成文件target添加库
TARGET_LINK_LIBRARIES(hello ${CMAKE_THREAD_LIBS_INIT})
3.OpenCV
# project name
PROJECT(HELLO)
# using C++11
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 ")
# cmake version
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)
# find OpenCV
FIND_PACKAGE(OpenCV REQUIRED)
# show the message of OpenCV
message(STATUS "OpenCV library status:")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " headers: ${OpenCV_INCLUDE_DIRS}")
message(STATUS " libraries: ${OpenCV_LIBS}")
# link headers
INCLUDE_DIRECTORIES({OpenCV_INCLUDE_DIRS})
# 添加源代码文件到SRC_LIST变量中
AUX_SOURCE_DIRECTORY(. SRC_LIST)
# 生成可执行文件
ADD_EXECUTABLE(hello ${SRC_LIST})
# after ADD_EXECUTABLE,为生成文件target添加库
TARGET_LINK_LIBRARIES(hello ${OpenCV_LIBS})
4.OpenCV+thread库
# project name
PROJECT(HELLO)
# using C++11 and 线程
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11 -pthread")
# cmake version
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.1)
# find OpenCV
FIND_PACKAGE(OpenCV REQUIRED)
# show the message of OpenCV
message(STATUS "OpenCV library status:")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " headers: ${OpenCV_INCLUDE_DIRS}")
message(STATUS " libraries: ${OpenCV_LIBS}")
# link headers
INCLUDE_DIRECTORIES({OpenCV_INCLUDE_DIRS})
# 添加源代码文件到SRC_LIST变量中
AUX_SOURCE_DIRECTORY(. SRC_LIST)
# 生成可执行文件
ADD_EXECUTABLE(hello ${SRC_LIST})
# after ADD_EXECUTABLE,为生成文件target添加库
TARGET_LINK_LIBRARIES(hello ${OpenCV_LIBS})
或另一种写法:
# project name
PROJECT(HELLO)
# using C++11 and 线程
set(CMAKE_CXX_FLAGS "${CAMKE_CXX_FLAGS} -std=c++11")
# cmake version
CMAKE_MINIMUM_REQUIRED(VERSION 3.5.1)
# find OpenCV and Threads线程库
FIND_PACKAGE(OpenCV REQUIRED)
FIND_PACKAGE(Threads)
# show the message of OpenCV
message(STATUS "OpenCV library status:")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " headers: ${OpenCV_INCLUDE_DIRS}")
message(STATUS " libraries: ${OpenCV_LIBS}")
# link headers
INCLUDE_DIRECTORIES({OpenCV_INCLUDE_DIRS})
# 添加源代码文件到SRC_LIST变量中
AUX_SOURCE_DIRECTORY(. SRC_LIST)
# 生成可执行文件
ADD_EXECUTABLE(hello ${SRC_LIST})
# after ADD_EXECUTABLE,为生成文件target添加库
TARGET_LINK_LIBRARIES(hello ${OpenCV_LIBS})
TARGET_LINK_LIBRARIES(hello ${CMAKE_THREAD_LIBS_INIT})