日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

cmakelist的作用及使用

發(fā)布時(shí)間:2023/12/31 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cmakelist的作用及使用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

cmakelist的作用及使用

cpp平常的運(yùn)行方式

cpp為編譯型語(yǔ)言,需要把cpp文件編譯成可執(zhí)行文件

然后執(zhí)行可執(zhí)行文件

gcc main.cpp -o main

執(zhí)行該可執(zhí)行文件 ./main

但由于一些依賴(lài)錯(cuò)綜復(fù)雜,且需要大量指令依次執(zhí)行

還有在服務(wù)器上尋找?guī)斓脑?#xff0c;產(chǎn)生了makefile

Makefile 即為一個(gè) 順序存了很多命令的文件。

我們執(zhí)行make的時(shí)候,即運(yùn)行makefile 按照順序執(zhí)行makefile里的指令

makefile的結(jié)構(gòu)是這樣的

目標(biāo):依賴(lài)目標(biāo)

命令

makefile里默認(rèn)一個(gè)目標(biāo)就是一個(gè)文件

我們假如想要不生成這個(gè)文件,就要加上

.PHONY: 目標(biāo)

使用make指令的時(shí)候,通常要加上各種參數(shù),表明你想要的是哪個(gè)目標(biāo),比如

install:…

uninstall: …

make install 就會(huì)執(zhí)行install

make uninstall 就會(huì)執(zhí)行uninstall

直接 make 會(huì)自動(dòng)執(zhí)行第一個(gè)目標(biāo)

但寫(xiě)makefile也是一個(gè)很繁雜的任務(wù),這時(shí)cmake出現(xiàn)了

它作為一個(gè)跨平臺(tái)的工具,可以幫助找資源,生成makefile

cmake一般的流程

首先 項(xiàng)目文件中一般會(huì)有一個(gè) cmakelist

我們創(chuàng)建一個(gè)文件夾叫build(什么名字都可以),代表在這里生成可執(zhí)行文件

在build路徑下,執(zhí)行cmake …

cmake會(huì)幫助鏈接好各個(gè)庫(kù),生成好makefile

再執(zhí)行 make 指令,生成可執(zhí)行文件

一個(gè)簡(jiǎn)單的cmakelist的樣式

cmake_minimum_required(VERSION 2.6) project(MY_PROJECT)set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF)find_package(PCL 1.9.1 REQUIRED COMPONENTS common io geometry kdtree search features surface visualization filters)file(GLOB SOURCES main.cpp)add_executable(server ${SOURCES}) #include_directories(${CMAKE_SOURCE_DIR}/include) link_directories(${PCL_LIBRARY_DIRS}) add_definitions(${PCL_DEFINITIONS})#include_directories("/opt/libjpeg-turbo/include") #link_directories("/opt/libjpeg-turbo/lib")include_directories(server ${PCL_INCLUDE_DIRS} ) target_link_libraries(server ${PCL_LIBRARIES} turbojpeg zstd)

SOURCES /home/eminem/pcl_test/main.cpp
PCL_LIBRARY_DIRS /usr/lib/x86_64-linux-gnu
PCL_DEFINITIONS -DDISABLE_PCAP;-DDISABLE_PNG;-DDISABLE_LIBUSB_1_0
PCL_INCLUDE_DIRS /usr/include/pcl-1.10;/usr/include/eigen3;/usr/include;/usr/include/ni;/usr/include/openni2;/usr/include/vtk-7.1;/usr/include/freetype2;/usr/include/x86_64-linux-gnu
PCL_LIBRARIES pcl_common;pcl_octree;pcl_io;pcl_kdtree;pcl_search;pcl_features;pcl_surface;pcl_visualization;pcl_sample_consensus;pcl_filters;/usr/lib/x86_64-linux-gnu/libboost_system.so;/usr/lib/x86_64-linux-gnu/libboost_filesystem.so;/usr/lib/x86_64-linux-gnu/libboost_date_time.so;/usr/lib/x86_64-linux-gnu/libboost_iostreams.so;/usr/lib/x86_64-linux-gnu/libboost_regex.so;optimized;/home/eminem/.conda/envs/myTorch/lib/libqhull_p.so;debug;/home/eminem/.conda/envs/myTorch/lib/libqhull_p.so;/usr/lib/libOpenNI.so;/usr/lib/libOpenNI2.so;vtkChartsCore;vtkCommonColor;vtkCommonCore;vtksys;vtkCommonDataModel;vtkCommonMath;vtkCommonMisc;vtkCommonSystem;vtkCommonTransforms;vtkCommonExecutionModel;vtkFiltersGeneral;vtkCommonComputationalGeometry;vtkFiltersCore;vtkInfovisCore;vtkFiltersExtraction;vtkFiltersStatistics;vtkImagingFourier;vtkImagingCore;vtkalglib;vtkRenderingContext2D;vtkRenderingCore;vtkFiltersGeometry;vtkFiltersSources;vtkRenderingFreeType;/usr/lib/x86_64-linux-gnu/libfreetype.so;/usr/lib/x86_64-linux-gnu/libz.so;vtkFiltersModeling;vtkImagingSources;vtkInteractionStyle;vtkInteractionWidgets;vtkFiltersHybrid;vtkImagingColor;vtkImagingGeneral;vtkImagingHybrid;vtkIOImage;vtkDICOMParser;vtkmetaio;/usr/lib/x86_64-linux-gnu/libjpeg.so;/usr/lib/x86_64-linux-gnu/libpng.so;/usr/lib/x86_64-linux-gnu/libtiff.so;vtkRenderingAnnotation;vtkRenderingVolume;vtkIOXML;vtkIOCore;vtkIOXMLParser;/usr/lib/x86_64-linux-gnu/libexpat.so;vtkIOGeometry;vtkIOLegacy;vtkIOPLY;vtkRenderingLOD;vtkViewsContext2D;vtkViewsCore;vtkRenderingContextOpenGL2;vtkRenderingOpenGL2;FLANN::FLANN

六?命令

project?(HELLO)???#指定項(xiàng)目名稱(chēng),生成的VC項(xiàng)目的名稱(chēng);

使用${HELLO_SOURCE_DIR}表示項(xiàng)目根目錄

file(GLOB SOURCES *.cpp)

將所有cpp文件 的絕對(duì)路徑 都加入到 SOURCES 變量中

find_package(PCL 1.9.1 REQUIRED …) 找?guī)?/p>

include_directories:指定頭文件的搜索路徑,相當(dāng)于指定gcc的-I參數(shù)

include_directories (${HELLO_SOURCE_DIR}/Hello)??#增加Hello為include目錄

link_directories:動(dòng)態(tài)鏈接庫(kù)或靜態(tài)鏈接庫(kù)的搜索路徑,相當(dāng)于gcc的-L參數(shù)

>> link_directories (${HELLO_BINARY_DIR}/Hello)?????#增加Hello為link目錄

add_subdirectory:包含子目錄

>> add_subdirectory (Hello)

add_executable:編譯可執(zhí)行程序,指定編譯,好像也可以添加.o文件

>> add_executable (helloDemo demo.cxx demo_b.cxx)???#將cxx編譯成可執(zhí)行文件——

add_definitions:添加編譯參數(shù)

add_definitions(-DDEBUG)將在gcc命令行添加DEBUG宏定義;

add_definitions( “-Wall -ansi –pedantic –g”)

target_link_libraries:添加鏈接庫(kù),相同于指定-l參數(shù)

target_link_libraries(demo Hello) #將可執(zhí)行文件與Hello連接成最終文件demo

add_library:

add_library(Hello hello.cxx)??#將hello.cxx編譯成靜態(tài)庫(kù)如libHello.a

add_custom_target:

message( status|fatal_error, “message”):

set_target_properties( … ): lots of properties… OUTPUT_NAME, VERSION, …

link_libraries( lib1 lib2 …): All targets link with the same set of libs

總結(jié)

以上是生活随笔為你收集整理的cmakelist的作用及使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。