Linux下使用CMake编译C++的基本方法

cmake的两个有用的方向:

  • 通过cmake + clangd来看源码
  • 生成依赖图

一、g++的编译选项

  • -L 指定库文件(libXXX.a,libXXX.so)的目录
  • -I 指定头文件.h的目录
  • -l 指定要链接的库名XXX

二、动态链接器的查找路径

  • rpath
  • .bashrc中的系统变量
  • 系统目录 /usr/lib/ 和 usr/local/lib
  • ld.so.cache动态库缓存

三、CMakeLists.txt的一个Linux下的范例

cmake_minimum_required(VERSION 3.20)
# 相当于VS的.sln
project(demo)

#set(SRC add.cpp sub.cpp mul.cpp div.cpp main.cpp) 设置变量SRC
# 到src/目录中查找*.cpp文件,然后把文件列表存入变量SRC
aux_source_directory("${CMAKE_CURRENT_SOURCE_DIR}/src" SRC)

# 到include/目录中查找*.h文件,然后把文件列表存入变量INC
file(GLOB INC "${CMAKE_CURRENT_SOURCE_DIR}/src/include/*.h")

# 输出变量的内容
message(${PROJECT_BINARY_DIR}) # build/

# 生成静态库,同时创建目标demo
#add_library(demo STATIC ${SRC})

# 生成动态库,同时创建目标demo
add_library(demo SHARED ${SRC})

# 指定输出库的目录
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

# 指定输出可执行文件的目录
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

# -I 指定头文件.h的目录
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

# -L 指定库文件(libXXX.a,libXXX.so)的目录
link_directories(${PROJECT_BINARY_DIR}/lib)

# 链接静态库,-l 指定要链接的库名calc
#link_libraries(calc)

# 相当于VS的.vcproj:生成可执行文件,同时创建目标demo
add_executable(demo ${SRC} ${INC})

# -I 指定头文件.h的目录
#target_include_directories(demo PUBLIC ${PROJECT_BINARY_DIR}/include)

# 链接动态库,-l 指定要链接的库名calc
# 可以链接动态库,也可以连接静态库,但优先链接动态库。
target_link_libraries(demo calc)

这里注意:target(demo)必须是由函数指令创建的——例如通过 add_executable() 或者 add_library()创建——不能是 Alias Targets 别名目标。所以,CMakeLists.txt中函数指令的使用顺序是有讲究的(针对target目标的使用)。

相应的cmake基本命令如下:

cmake -S . -B build/
cmake --build build/
# build/是默认的可执行程序输出目录
cd build/
./demo
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值