Bin:全称binary,含义是二进制。该目录中存储的都是一些二进制文件,文件都是可以被运行的。
Dev:该目录中主要存放的是外接设备,例如盘、其他的光盘等。在其中的外接设备是不能直接被使用的,需要挂载(类似window下的分配盘符)。
Etc:该目录主要存储一些配置文件。
Home:表示“家”,表示除了root用户以外其他用户的家目录,类似于windows下的User/用户目录。
Proc:全称process,表示进程,该目录中存储的是Linux运行时候的进程。
Root:该目录是root用户自己的家目录。
Sbin:全称super binary,该目录也是存储一些可以被执行的二进制文件,但是必须得有super权限的用户才能执行。
Tmp:表示“临时”的,当系统运行时候产生的临时文件会在这个目录存着。
Usr:存放的是用户自己安装的软件。类似于windows下的program files。
Var:存放的程序/系统的日志文件的目录。
Mnt:当外接设备需要挂载的时候,就需要挂载到mnt目录下。
gdb
linux下gdb调试方法与技巧整理
Linux环境下的GDB调试方法
CMakeLists.txt
#cmake最小版本需求
cmake_minimum_required(VERSION xxx)
#设置此项目的名称
project(xxx)
#生成可执行文件target ,后面填写的是生成此可执行文件所依赖的源文件列表。
add_executable(target target_source_codes)
# 设置一个名字var_name 的变量,同时给此变量赋值为var_value
SET(var_name var_value)
# 指定编译器
# CMAKE_C_FLAGS_DEBUG ---- C 编译器
# CMAKE_CXX_FLAGS_DEBUG ---- C++ 编译器
# -std=c++11 使用 C++11
# -g:只是编译器,在编译的时候,产生调试信息。
# -Wall:生成所有警告信息。一下是具体的选项,可以单独使用
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g -wall ")
#指定编译类型,debug 或者为 release
# debug 会生成相关调试信息,可以使用 GDB 进行
# release 不会生成调试信息。当无法进行调试时查看此处是否设置为 debug.
set(CMAKE_BUILD_TYPE Debug)
# 打印消息
MESSAGE("MSG")
#给变量var_name赋值为var_value,comment是此变量的注释,和SET 有类似的功效,用于给某变量设置默认值
option(var_name "comment" var_value)
# 添加include路径,也就是头文件路径
include_directories(xxx)
# 调用xxx子目录的CMakeLists.txt执行
add_subdirectory(xxx)
# 给编译器添加xxx参数
add_compile_options(xxx)
# 给编译器添加库目录,
link_directories(xxx)
# 生成库文件,SHARED代表动态库,STATIC代表静态库, 最后一个参数代表此库的源文件列表
add_library(lib_name SHARED or STATIC lib_source_code)
# 给目标添加依赖库
target_link_libraries(target_name lib_name ...)
最小CMake工程
cmake_minimum_required(VERSION 3.0)
project(WAR)
include_directories(${CMAKE_SOURCE_DIR}/include)
set(CMAKE_BUILD_TYPE Debug)
add_executable(target main.cpp src/Gun.cpp src/Soldier.cpp)
多目录工程 - 直接编译
# Set the minimum version of CMake that can be used
cmake_minimum_required(VERSION 3.0)
#project name
project(SWAP)
#head file pat
include_directories( include )
#source directory files to var
add_subdirectory( src DIR_SRCS )
#add executable file
add_executable(swap_02 ${TEST_MATH})
#add link library
target_link_libraries(${FS_BUILD_BINARY_PREFIX}sqrt ${LIBRARIES})
多目录工程 - 生成库编译
# Set the minimum version of CMake that can be used
cmake_minimum_required(VERSION 3.0)
#project name
project(SWAP_LIBRARY)
#add compile options
add_compile_options("-Wall -std=c++11")
#set CMAKE_BUILD_TYPE
set( CMAKE_BUILD_TYPE Debug )
# set output binary path
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
############################################################
# Create a library
############################################################
#Generate the static library from the library sources
add_library( swap_library STATIC src/Swap.cpp )
target_include_directories( swap_lib PUBLIC ${PROJECT_SOURCE_DIR}/include )
############################################################
# Create an executable
############################################################
# Add an executable with the above sources
add_executable( swap_01 main.cpp )
# link the new swap_01 target with the swap_lib target
target_link_libraries( swap_01 swap_liby )
launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(lldb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/build/target",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"preLaunchTask": "Build",
"MIMode": "lldb",
}
]
}
tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"options": {"cwd": "${workspaceFolder}/build"},
"tasks": [
{
"type": "shell",
"label": "cmake",
"command":"cmake",
"args":[".."]
},
{
"label": "make",
"group": {
"kind": "build",
"isDefault": true
},
"command":"make",
"args":[]
},
{
"label": "Build",
"dependsOrder":"sequence",
"dependsOn":["cmake","make"]
},
{
"label": "echo",
"type": "shell",
"command": "echo Hello"
}
]
}
当我们在写CMakeLists.txt文件时,常常会搞不明白link_directories, LINK_LIBRARIES, target_link_libraries这3者的区别,下面就其详细介绍:
它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用(这里特指c++。c和Java中用法类似)。
比如:
include_directories("/opt/MATLAB/R2012a/extern/include")
语法:
link_directories(directory1 directory2 ...)
它相当于g++命令的-L选项的作用,也相当于环境变量中增加LD_LIBRARY_PATH的路径的作用。
比如:
LINK_DIRECTORIES("/opt/MATLAB/R2012a/bin/glnxa64")
List of direct link dependencies.
比如:
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so")
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")
也可以写成:
LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")
语法:TARGET_LINK_LIBRARIES(targetlibrary1
比如(以下写法(包括备注中的)都可以):
TARGET_LINK_LIBRARIES(myProject hello),连接libhello.so库
TARGET_LINK_LIBRARIES(myProject libhello.a)
TARGET_LINK_LIBRARIES(myProject libhello.so)
再如:
TARGET_LINK_LIBRARIES(myProject #这些库名写法都可以。
TARGET_LINK_LIBRARIES(myProject TARGET_LINK_LIBRARIES(myProject -leng)
CMakeLists文件链接方式有如下2种:
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
include_directories(``"/opt/MATLAB/R2012a/extern/include"``)
LINK_DIRECTORIES(``"/opt/MATLAB/R2012a/bin/glnxa64"``)
add_executable(myProject main.cpp)
target_link_libraries(myProject eng mx)
#equals to below
#target_link_libraries(myProject -leng -lmx) `
#target_link_libraries(myProject libeng.so libmx.so)`
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
include_directories(``"/opt/MATLAB/R2012a/extern/include"``)
#directly link to the libraries.
LINK_LIBRARIES(``"/opt/MATLAB/R2012a/bin/glnxa64/libeng.so"``)
LINK_LIBRARIES(``"/opt/MATLAB/R2012a/bin/glnxa64/libmx.so"``)
#equals to below
#LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")
add_executable(myProject main.cpp)