camke

c++ 编译

参考连接:
使用CMAKE链接外部的动态库时找不到库文件解决办法:https://blog.csdn.net/yangbing1113/article/details/8036707
CMakeLists.txt的编写
https://blog.csdn.net/zhuquan945/article/details/72847832

1.基础编译命令

a. 命令如下:

gcc main.cpp -I ../include/ -L ../lib -lhello -o demo

b. 说明

-I 指定头文件路径

-L 指定静态库路径

-l 说明链接的库名字

编译成的二进制文件为demo

备注: 对于动态库需要指定动态库路径,命令:export LD_LIBRARY_PATH=./lib

2. cmake命令

以cmake文件来说明各个命令的作用

示例1:

#文件名必须为CMakeLists.txt 
cmake_minimum_required(VERSION 2.8)
#PROJECT 定义工程名称
PROJECT (HELLO)
#ADD_SUBDIRECTORY 增加子文件目录进行编译
ADD_SUBDIRECTORY(src)
MESSAGE(STATUS "This is project dir " ${PROJECT_BINARY_DIR})
#SET 定义变量
set(ThirdPartyLibDir ${CMAKE_CURRENT_SOURCE_DIR}/lib)

示例2:

SET(SRC_LIST
    main.cpp
    ../include/hello.h) 
 
 # 使用变量SRC_LIST指定的文件编译可执行文件demo
 # 与add_executable对应的是add_library,编译库文件
 add_executable(demo ${SRC_LIST})
 MESSAGE(STATUS "current dir:" ${CMAKE_CURRENT_SOURCE_DIR})
 #指定头文件路径
 # 如果没有此指令,代码头文件包含需指定头文件路径
 # 路径位置指的是当前CmakeList的位置
 target_include_directories(demo PRIVATE  ../include/)
 # 链接动态库
 target_link_libraries(demo ${PROJECT_SOURCE_DIR}/lib/libhello.so)
  # 链接静态库
 #target_link_libraries(demo ${PROJECT_SOURCE_DIR}/lib/libhello.a)

其他命令说明:

add_library( [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[source1] [source2] […])
其中表示库文件的名字,该库文件会根据命令里列出的源文件来创建。

而STATIC、SHARED和MODULE的作用是指定生成的库文件的类型。

STATIC库是目标文件的归档文件,在链接其它目标的时候使用。

SHARED库会被动态链接(动态链接库),在运行时会被加载。

MODULE库是一种不会被链接到其它目标中的插件,但是可能会在运行时使用dlopen-系列的函数。

默认状态下,库文件将会在于源文件目录树的构建目录树的位置被创建,该命令也会在这里被调用。

target_link_libraries中属性PRIVATE、PUBLIC、INTERFACE含义

a. 如果源文件(例如CPP)中包含第三方头文件,但是头文件(例如hpp)中不包含该第三方文件头,采用PRIVATE。

b. 如果源文件和头文件中都包含该第三方文件头,采用PUBLIC。

c. 如果头文件中包含该第三方文件头,但是源文件(例如CPP)中不包含,采用 INTERFACE。

编译问题说明:

报错undefined reference可能原因:

动态库没有链接到;

c++链接c文件,未加extern “C”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值