【C++】CMakeList.txt在命令行的使用
前提:在官网下载好了cmake工具,并且配置好了环境变量。
一、 编写CMakeLists.txt
在项目的顶层目录中,建立一个CMakeLists.txt文件。以某个真实项目为例,内容如下:
cmake_minimum_required (VERSION 3.10.0) SET(CMAKE_BUILD_TYPE "Debug") SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb") SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall") #if(${OpenCV_VERSION_MAJOR} GREATER 3) # set(CMAKE_CXX_STANDARD 11) #endif() # 项目名称 project(IR) find_package(OpenCV REQUIRED) # 头文件路径 include_directories( "${PROJECT_SOURCE_DIR}/uvc" "${PROJECT_SOURCE_DIR}/include" "${OpenCV_INCLUDE_DIRS}" #"/usr/include/opencv4" #"/usr/include/opencv4/opencv2" ) link_directories( "/usr/lib/aarch64-linux-gnu" "/usr/lib" "${PROJECT_SOURCE_DIR}/lib" #"${OpenCV_LIBS_DIRS}" "/usr/lib/aarch64-linux-gnu/" ) SET(SRC_LIST "${PROJECT_SOURCE_DIR}/uvc/camtrans.cpp" "${PROJECT_SOURCE_DIR}/uvc/ircammanager.cpp" "${PROJECT_SOURCE_DIR}/uvc/serialport.cpp" "${PROJECT_SOURCE_DIR}/uvc/v4l2core.c" "${PROJECT_SOURCE_DIR}/src/client_triton.cpp" ) #------------选择编译后生成可执行文件还是动态链接库 # add_library( #clienttriton SHARED #${SRC_LIST} # $<TARGET_OBJECTS:json-utils-library> #) add_executable( IR ${SRC_LIST} # $<TARGET_OBJECTS:json-utils-library> ) SET(LK_LIB ${OpenCV_LIBS} ) #add_executable(TritonClient ${SRC_LIST}) target_link_libraries(IR ${LK_LIB}) target_link_libraries(IR /lib/aarch64-linux-gnu/libpthread.so.0)
二、使用cmake编译
写好CMakeLists.txt,需要进行编译并生成可执行文件,以下是步骤,假设工程目录为work_ws/bufferevent.
首先进入build文件夹
cd work_ws/bufferevent/build
接下来生成makefile文件,..表示上一级目录,也就是CMakeLists.txt所在目录
cmake ..
编译makefile文件,生成可执行文件
make
三、省时省力小技巧
如果我们嫌每次都要删除原来生成的可执行文件,然后输入cmke..,然后再make有点繁琐,我们可以自己编写sh文件放在build文件夹下,在sh文件里输入我们要执行的相关指令。如下,是我在build文件夹下创建的make.sh文件。
#开启扩展模式匹配 否则识别不了下面的!() shopt -s extglob #删除当前文件夹下除了make.sh之外的所有文件 rm -rf !(make.sh) #生成Makefile cmake .. #根据Makefile生成编译生成可执行文件 make #删除中间产生的编译文件 rm -rf CMakeFiles CMakeCache.txt cmake_install.cmake Makefile
这样,每次我只要进入工程下的build文件夹,输入
sh make.sh
即可编译生成可执行文件。
下一篇:
Java Library购买(集合版)