如何打开linux下的图形化工作界面
我曾经天真的以为安装好了cmake脚本之后就可以打开图形化的工作界面,但是实际上对于友好的图形化界面是需要额外安装的,对于像windows这样的系统当然可以直接安装好界面,但是linux嘛,默认都是会用脚本解决一切问题的人,所以图形化的界面显然是多余的。
为什么需要安装图形化的cmake工作界面
听老师说过,学习cmake的精髓就是通过GUI找到自己的脚本配置。所以就是你还要sudo apt-get install cmake-gui
CMake项目的配置过程
命令的初识

头文件复杂引入方式(路径方法)

头文件简单引入方式(链接到头文件目录)
改进方法,PUBLIC就是让我们的头文件是可见的
将远程glfw作为子模块拉取下来
由于glfw很常见,所以就采用它作为我们的实验对象,子模块网址
将子模块全部提交到仓库

主目录下生产.gitmodules文件

编译子项目出错


根据提示查找对应的包即可
配置好相关的依赖包之后进行执行成功
适合所有图形处理库的环境
使用conda env create -n xxx_env -f xx.yml激活环境就可以运行编译上面的代码了
name: Colmap
channels:
- intel
- saedrna
- conda-forge
- zeus1942
- defaults
dependencies:
- _libgcc_mutex=0.1=conda_forge
- _openmp_mutex=4.5=1_llvm
- assimp=5.0.1=hac5445f_2
- binutils_impl_linux-64=2.34=h2122c62_9
- binutils_linux-64=2.34=h47ac705_27
- blas=2.17=openblas
- boost-cpp=1.72.0=h7b93d67_2
- bzip2=1.0.8=h516909a_3
- c-ares=1.16.1=h516909a_3
- ca-certificates=2020.12.5=ha878542_0
- cairo=1.16.0=h3fc0475_1005
- capstone=4.0.2=py38h1e0a361_0
- catch2=2.11.3=hc9558a2_0
- cereal=1.3.0=0
- ceres-solver=1.14.0=h0948850_10
- certifi=2020.12.5=py38h578d9bd_1
- cfitsio=3.470=hce51eda_6
- cgal-cpp=5.0.3=h747953b_0
- cmake=3.18.2=h5c55442_0
- collada-dom=2.5.0=h4ace962_2
- curl=7.71.1=he644dc0_5
- dbus=1.13.6=he372182_0
- eigen=3.3.7=hc9558a2_1001
- embree3=3.11.0=hc9558a2_0
- entwine=2.1.0=hb7262df_5
- expat=2.2.9=he1b5a44_2
- ffmpeg=4.3.1=h167e202_0
- flann=1.9.1=h44f99b7_1008
- fontconfig=2.13.1=h1056068_1002
- freeimage=3.18.0=h6858f65_4
- freetype=2.10.2=he06d7ca_0
- freexl=1.0.5=h516909a_1002
- gcc_impl_linux-64=9.3.0=ha2fd2e4_16
- gcc_linux-64=9.3.0=h44160b2_27
- gdal=3.1.2=py38hb61cb63_1
- geogram=1.7.5=h5171369_1001
- geographiclib=1.50=he1b5a44_1000
- geos=3.8.1=he1b5a44_0
- geotiff=1.6.0=ha04d9d0_1
- gettext=0.19.8.1=hc5be6a0_1002
- gflags=2.2.2=he1b5a44_1004
- giflib=5.2.1=h516909a_2
- glew=2.1.0=he1b5a44_0
- glfw=3.3.2=h516909a_1
- glib=2.65.0=h6f030ca_0
- glm=0.9.9.4=hc9558a2_0
- glog=0.4.0=h49b9bf7_3
- gmp=6.2.0=he1b5a44_2
- gnutls=3.6.13=h79a8f9a_0
- graphite2=1.3.13=he1b5a44_1001
- gst-plugins-base=1.14.5=h0935bb2_2
- gstreamer=1.14.5=h36ae1b5_2
- gxx_impl_linux-64=9.3.0=hde52e87_16
- gxx_linux-64=9.3.0=ha9dd585_27
- harfbuzz=2.7.2=hee91db6_0
- hdf4=4.2.13=hf30be14_1003
- hdf5=1.10.6=nompi_h3c11f04_101
- icu=67.1=he1b5a44_0
- ilmbase=2.5.2=h8b12597_0
- ipp-include=2020.2=intel_254
- ipp-static=2020.2=intel_254
- jasper=1.900.1=h07fcdf6_1006
- jpeg=9d=h516909a_0
- json-c=0.13.1=hbfbb72e_1002
- jsoncpp=1.8.4=hc9558a2_1002
- jxrlib=1.1=h7f98852_2
- kealib=1.4.13=h33137a7_1
- kernel-headers_linux-64=2.6.32=h77966d4_13
- krb5=1.17.1=hfafb76e_3
- lame=3.100=h14c3975_1001
- laszip=3.4.3=he1b5a44_1
- laz-perf=1.4.4=he1b5a44_0
- lcms2=2.11=hcbb858e_1
- ld_impl_linux-64=2.34=hc38a660_9
- libblas=3.8.0=17_openblas
- libcblas=3.8.0=17_openblas
- libclang=10.0.1=default_hde54327_1
- libcurl=7.71.1=hcdd3856_5
- libdap4=3.20.6=h1d1bd15_1
- libdrm-cos6-x86_64=2.4.65=h9d98e8f_1104
- libedit=3.1.20191231=he28a2e2_2
- libev=4.33=h516909a_1
- libevent=2.1.10=hcdb4288_2
- libffi=3.2.1=he1b5a44_1007
- libgcc-devel_linux-64=9.3.0=hfd08b2a_16
- libgcc-ng=9.3.0=h24d8f2e_16
- libgdal=3.1.2=hb2a6f5f_1
- libgfortran-ng=7.5.0=hdf63c60_16
- libglu=9.0.0=he1b5a44_1001
- libgomp=9.3.0=h24d8f2e_16
- libiconv=1.16=h516909a_0
- libjpeg-turbo=2.0.3=h516909a_1
- libkml=1.3.0=hb574062_1011
- liblapack=3.8.0=17_openblas
- liblapacke=3.8.0=17_openblas
- libllvm10=10.0.1=he513fc3_3
- libnetcdf=4.7.4=nompi_h84807e1_105
- libnghttp2=1.41.0=h8cfc5f6_2
- libopenblas=0.3.10=pthreads_hb3c22a3_4
- libopencv=4.4.0=py38_2
- libpng=1.6.37=hed695b0_2
- libpq=12.3=h5513abc_0
- libraw=0.20.2=h46eb526_0
- libselinux-cos6-x86_64=2.0.94=h9d98e8f_1104
- libsepol-cos6-x86_64=2.0.41=h9d98e8f_1104
- libspatialite=4.3.0a=h57f1b35_1039
- libssh2=1.9.0=hab1572f_5
- libstdcxx-devel_linux-64=9.3.0=h4084dd6_16
- libstdcxx-ng=9.3.0=hdf63c60_16
- libtiff=4.1.0=hc7e4089_6
- libuuid=2.32.1=h14c3975_1000
- libuv=1.39.0=h516909a_0
- libwebp-base=1.1.0=h516909a_3
- libx11-common-cos6-x86_64=1.6.4=h9d98e8f_1104
- libx11-cos6-x86_64=1.6.4=h9d98e8f_1104
- libxau-cos6-x86_64=1.0.6=h9d98e8f_1104
- libxcb=1.13=h14c3975_1002
- libxcb-cos6-x86_64=1.12=h9d98e8f_1104
- libxdamage-cos6-x86_64=1.1.3=h9d98e8f_1104
- libxext-cos6-x86_64=1.3.3=h9d98e8f_1104
- libxfixes-cos6-x86_64=5.0.3=h9d98e8f_1104
- libxkbcommon=0.10.0=he1b5a44_0
- libxml2=2.9.10=h68273f3_2
- libxxf86vm-cos6-x86_64=1.1.3=h9d98e8f_1104
- llvm-openmp=10.0.1=hc9558a2_0
- lz4-c=1.9.2=he1b5a44_3
- mesa-dri-drivers-cos6-x86_64=11.0.7=h9d98e8f_1104
- mesa-dri1-drivers-cos6-x86_64=7.11=h9d98e8f_1104
- mesa-libgl-cos6-x86_64=11.0.7=h9d98e8f_1104
- mesa-libgl-devel-cos6-x86_64=11.0.7=h9d98e8f_1104
- metis=5.1.0=he1b5a44_1006
- mpfr=4.0.2=he80fd80_1
- mysql-common=8.0.21=1
- mysql-libs=8.0.21=hf3661c5_1
- ncurses=6.2=he1b5a44_1
- nettle=3.4.1=h1bed415_1002
- ninja=1.10.1=hc9558a2_1
- nitro=2.7.dev6=he1b5a44_3
- nspr=4.28=he1b5a44_0
- nss=3.56=he751ad9_0
- numpy=1.19.1=py38hbc27379_2
- ocl-icd=2.2.12=h516909a_1005
- opencv=4.4.0=py38_2
- openexr=2.5.2=he513fc3_0
- openh264=2.1.1=h8b12597_0
- openjpeg=2.3.1=h981e76c_3
- openscenegraph=3.6.5=h9b5ab6a_9
- openssl=1.1.1i=h7f98852_0
- pcl=1.9.1=h2dfa329_1005
- pcre=8.44=he1b5a44_0
- pdal=2.1.0=h9463286_7
- pip=20.2.2=py_0
- pixman=0.38.0=h516909a_1003
- poppler=0.89.0=h4190859_1
- poppler-data=0.4.9=1
- postgresql=12.3=h8573dbc_0
- proj=7.1.0=h966b41f_1
- pthread-stubs=0.4=h14c3975_1001
- py-opencv=4.4.0=py38h23f93f0_2
- python=3.8.5=h1103e12_7_cpython
- python_abi=3.8=1_cp38
- qhull=2019.1=hc9558a2_0
- qt=5.12.9=h1f2b2cb_0
- readline=8.0=he28a2e2_2
- rhash=1.3.6=h14c3975_1001
- setuptools=49.6.0=py38h32f6830_0
- sqlite=3.33.0=h4cf870e_0
- suitesparse=5.7.2=h717dc36_0
- sysroot_linux-64=2.12=h77966d4_13
- tbb=2020.2=hc9558a2_0
- tbb-devel=2020.2=hc9558a2_0
- tiledb=2.0.8=h3effe38_0
- tk=8.6.10=hed695b0_0
- tzcode=2020a=h516909a_0
- wheel=0.35.1=pyh9f0ad1d_0
- x264=1!152.20180806=h14c3975_0
- xerces-c=3.2.3=hfe33f54_1
- xorg-fixesproto=5.0=h14c3975_1002
- xorg-kbproto=1.0.7=h14c3975_1002
- xorg-libice=1.0.10=h516909a_0
- xorg-libsm=1.2.3=h84519dc_1000
- xorg-libx11=1.6.12=h516909a_0
- xorg-libxau=1.0.9=h14c3975_0
- xorg-libxcursor=1.2.0=h516909a_0
- xorg-libxdmcp=1.1.3=h516909a_0
- xorg-libxext=1.3.4=h516909a_0
- xorg-libxfixes=5.0.3=h516909a_1004
- xorg-libxinerama=1.1.4=hf484d3e_1000
- xorg-libxrandr=1.5.2=h516909a_1
- xorg-libxrender=0.9.10=h516909a_1002
- xorg-randrproto=1.5.0=h516909a_1001
- xorg-renderproto=0.11.1=h14c3975_1002
- xorg-xextproto=7.3.0=h14c3975_1002
- xorg-xproto=7.0.31=h14c3975_1007
- xz=5.2.5=h516909a_1
- zlib=1.2.11=h516909a_1009
- zstd=1.4.5=h6597ccf_2
一般的CMake工程的编译原则就是下面的状况
configure.sh用于编译Makefile文件
rm build -rf
mkdir build
# cmake -S . -B ./build
# -D就是代表需要将哪一个选项进行操作,下面就是不编译GLFW文档
cmake -DGLFW_BUILD_DOCS=OFF -S . -B ./build
build.sh用于编译.o可执行文件和.a文件
cd build
# 下面就是利用编译好的Makefile进行编译成.o和.a以及.so静态库
make -j4
run.sh用于运行项目生产的.o文件
# 上面明明已经编译好了应该是进入了build文件但是实际上执行下来并没有进入build目录
cd build
./lincong


外层CMakeLists.txt
cmake_minimum_required(VERSION 3.10.4)
project(lincong)
# 下面的语句生成.o文件,linux平台下的可执行文件
add_executable(${PROJECT_NAME} src/main.cpp)
#在链接库目录之前先进行子集目录的编译
add_subdirectory(Adder)
#第二,为了我们引入头文件的便捷性,我们应该将头文件路径指出
target_include_directories(${PROJECT_NAME} PUBLIC Adder)
# 将自己编译的各个静态库部分链接到项目上
#addlib的名字为编译子目录的时候所取的名字
target_link_libraries(${PROJECT_NAME} addlib)
# 接下来是引入外部的GLFW部分
# 第一步,告诉CMake去哪里编译库
add_subdirectory(external/glfw)
# 第二步,链接头文件目录,这个目录是源文件所在位置文件所在位置而不是编译
target_include_directories(${PROJECT_NAME}
PUBLIC external/glfw/include)
# 第三步,链接静态库目录的前缀文件
target_link_directories(${PROJECT_NAME}
PRIVATE external/glfw/src)
# 第四步,链接静态库
target_link_libraries(${PROJECT_NAME} glfw)
# 经过第三步之后第四步才会正常执行否则就会报错
内层src目录的CMakeLists.txt
#其实当你自己根据惯性思维去做这个东西的时候
#你会发现aux那些函数根本就不支持这个路径的用法
#为了提高效率问题,就需要CMakeLists.txt文件搭建起各个部分之间的桥梁
#实际上这个静态库就是.a文件结尾的库
#将加法作为一个静态库
add_library(addlib add.cpp add.h)
目录结构

.gitignore
# .gitignore for c++
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
# .gitignore for cmake
CMakeLists.txt.user
CMakeCache.txt
CMakeFiles
CMakeScripts
Testing
Makefile
cmake_install.cmake
install_manifest.txt
compile_commands.json
CTestTestfile.cmake
_deps
# .gitignore for build
build/
[Bb][Uu][Ii][Ll][Dd]/
版权声明:本文为qq_45605535原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。