一、本次编译,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)