CMakeList 将CPP代码编译成可执行文件示例

一、本次编译,CMakeList中用到的语法详解

1、设置cmake 版本:cmake_minimum_required(VERSION 3.5)

2、# set the project name

project(Agent_Test)

3、设置debug或者release

set(CMAKE_BUILD_TYPE debug)

set(CMAKE_BUILD_TYPE Release)

4、将头文件目录告诉编译器

include_directories()

5、设置编译可执行文件的存放路径:set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

6、设置.a静态库或者.so动态库的加载路径

link_directories(thirdlib/libuv-1.42.0/lib thirdlib/lib)

7、设置需要编译的cpp代码

add_executable(Agent_Test

main.cpp)

8、设置要链接的库文件的名称

target_link_libraries(Agent_Test    liblog.so libuv_a.a libcutils.a)

这里说一下,像libpthread.so等一些系统库,即使代码中没有,编译时会去系统特定存放库的目录中查找

9、.a静态库和.so动态库的区别

库中可能还引用了一些第三方库,如果是静态库,这些第三方库会一起打包进静态库中;如果是动态库的话,库中引用的第三方库则不会被打包到动态库中。

因此,同等库,静态库往往比动态库大

10、加载代码本地库的方法:

(1)、第一种方法:

添加需要链接的库文件目录:link_directories()

target_link_libraries(Agent_Test  xxx.so   xx.a)

(2)第二种方法:

动态库:

add_library(libc++ SHARED IMPORTED)

set_target_properties(libc++  PROPERTIES IMPORTED_LOCATION

                   thirdlib/lib/libc++.so)

静态库:

add_library(libcutils STATIC IMPORTED)

 set_target_properties(libcutils  PROPERTIES IMPORTED_LOCATION

                      thirdlib/lib/libcutils.a)

二、一个项目中使用,完整的CMakeList.txt ,仅供参考

cmake_minimum_required(VERSION 3.5) 

# set the project name 
project(Agent_Test) 


set(CMAKE_BUILD_TYPE debug)

IF(NOT CMAKE_BUILD_TYPE)
  SET(CMAKE_BUILD_TYPE Release)
ENDIF()
MESSAGE("Build type: " ${CMAKE_BUILD_TYPE})


#1、将头文件目录告诉编译器
include_directories(
api 
base
tools 
net 
interface 
controller 
http 
cjsonObject 
thirdlib/jsoncpp/include
thirdlib/libuv-1.42.0/include
thirdlib/cutils/include
thirdlib/log/include
)


set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
#set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)







#2、添加需要链接的库文件目录
link_directories(thirdlib/libuv-1.42.0/lib   thirdlib/lib)


#Linux使用pthread 需添加下面这句,不然会报错
# link_libraries(pthread)



# add_library(libc++ SHARED IMPORTED)
# set_target_properties(libc++  PROPERTIES IMPORTED_LOCATION
#                      thirdlib/lib/libc++.so)


# add_library(libcutils SHARED IMPORTED)
# set_target_properties(libcutils  PROPERTIES IMPORTED_LOCATION
#                       thirdlib/lib/libcutils.so)

# add_library(libpthread SHARED IMPORTED)
# set_target_properties(libpthread  PROPERTIES IMPORTED_LOCATION
#                       thirdlib/lib/libpthread.so)





add_executable(Agent_Test
main.cpp 
tools/utils.cpp
api/agent_api.cpp
api/agent_server.cpp
net/connection_base.cpp
net/tcp_connection.cpp
net/tcp_srv.cpp
net/uv_event.cpp
controller/query_dispose.cpp
controller/query_dispose2.cpp
base/event.cpp
base/buffer.cpp
base/lock.cpp
base/message.cpp
base/message2.cpp
base/que.cpp
base/task.cpp
base/base64.cpp
thirdlib/jsoncpp/src/lib_json/json_reader.cpp
thirdlib/jsoncpp/src/lib_json/json_writer.cpp
thirdlib/jsoncpp/src/lib_json/json_value.cpp
)





#3、设置要链接的库文件的名称
target_link_libraries(Agent_Testliblog.so  libuv_a.a  libcutils.a  libclang_rt.ubsan_minimal-aarch64-android.a) 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

粤M温同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值