Cmake学习

Cmake学习

CMake调用boost的编译脚本

cmake_minimum_required(VERSION 3.14)
project(boost_python)
#设置支持C++11特性
set(CMAKE_CXX_STANDARD 11)
#指定boost根目录
set(BOOST_ROOT E:/local/boost_1_61_0)
#设置不适用系统的的boost的库
set(BOOST_NO_SYSTEM_PATHS ON)
#设置使用静态的boost库
set(Boost_USE_STATIC_LIBS ON)
#查找boost库
find_package(Boost COMPONENTS thread system REQUIRED)

#如果已经找到
if(Boost_FOUND)
	MESSAGE( STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}.")
    MESSAGE( STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}.")
    MESSAGE( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}.")
    MESSAGE( STATUS "Boost_LIBRARY_DIRS = ${Boost_LIBRARY_DIRS}.")
    include_directories(${Boost_INCLUDE_DIRS}
						${CMAKE_CURRENT_SOURCE_DIR}/3Party/websocketpp-master)
    link_directories(${Boost_LIBRARY_DIRS})
    add_executable(boost_python src/main.cpp)
    target_link_libraries (boost_python ${Boost_LIBRARIES})
endif()

常见命令学习

SET(SRC_LIST main.c)  #将.c文件设置到变量SRC_LIST里面,可以设置多个函数链接变量,

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) #将生成的可执行文件放到build目录下的bin文件下
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) #将生成的lib库,放到build目录下的lib文件下。
set( CMAKE_BUILD_TYPE "Debug" )  # "REALEASE" 


${PROJECT_BINARY_DIR} #一般就是build目录下
${PROJECT_SOURCE_DIR} #就是CmakeLists.txt的同级目录。

ADD_SUBDIRECTORY(src )  #有多个目录的时候,每个目录都要写一个CmakeLists.txt文件,将这个文件包含进来。

MESSAGE([SEND_ERROR | STATUS | FATAL_ERROR] "message to display"..)
                      SATUS ,输出前缀为 — 的信息,  FATAL_ERROR,立即终止所有 cmake 过程, SEND_ERROR,
                      产生错误,生   成过程被跳过。
SHARED,动态库   STATIC,静态库   MODULE,在使用 dyld 的系统有效,如果不支持 dyld,则被当作 SHARED 对待
SET(LIBHELLO_SRC hello.c)
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})  #生成库文件
SET(LIBRARY_OUTPUT_PATH   <路径>) #将生成的库放到指定路径下

#设置库文件的版本和多个同名字的库文件,还不是很懂!!
SET_TARGET_PROPERTIES,其基本语法是:
SET_TARGET_PROPERTIES(target1 target2 ...                               
														PROPERTIES prop1 value1   
														prop2 value2 ...)
#可执行文件链接库文件												
TARGET_LINK_LIBRARIES(main libhello.a)
#查看可执行文件链接的库文件
ldd mian   #main是可执行文件


#这条指令可以用来向工程添加多个特定的头文件搜索路径
1,CMAKE_INCLUDE_DIRECTORIES_BEFORE,通过 SET 这个 cmake 变量为 on,可以将添加的头文件
     搜索路径放在已有路径的前面
 2,通过 AFTER 或者 BEFORE 参数,也可以控制是追加还是置前。
include_directories(/usr/include/hello)  #这是绝对路径,可以配合CMAKE_INCLUDE_DIRECTORIES_BEFORE使用

#下面用来找特定路径的头文件和库文件,要在~/.bashrc里面设置路径
#如 export ASIO_ROOT="/home/jb/install/asio"
# 如 export  CMAKE_INCLUDE_PATH=“/home/include”
特殊的环境变量 CMAKE_INCLUDE_PATH 和 CMAKE_LIBRARY_PATH
#当然也是可以直接include_directories()绝对路径来查找,但是设置环境变量的方法比较智能,看起来高大尚,我刚#开始也是被搞懵逼了。

这里简单说明一下,FIND_PATH 用来在指定路径中搜索文件名,比如:
FIND_PATH(myHeader NAMES hello.h  PATHS /usr/include   /usr/include/hello)
FIND_PATH(myHeader hello.h)  #cmake会区会去~/.bashrc里面的路径查找哪个有hello.h的头文件,然后将该文件的路径给myHeader
IF(myHeader)   #如果找到路径
    INCLUDE_DIRECTORIES(${myHeader})  #那就包含进来。
ENDIF(myHeader)





CMAKE_INSTALL_PREFIX 变量类似于 configure 脚本的 – prefix,常见的使用方法看起来是这个样子:
  cmake -DCMAKE_INSTALL_PREFIX=/usr .   #/usr .代表要安装的目录,可以更改
  #常见的命令例子
  ARCHIVE 特指静态库,  LIBRARY 特指动态库,  RUNTIME特指可执行目标二进制
  INSTALL(TARGETS ${PROJECT_NAME}                #可执行文件
                    RUNTIME DESTINATION bin                    #可执行文件的目录bin
                    LIBRARY DESTINATION lib                       #lib的目录lib
                    ARCHIVE DESTINATION libstatic           #动态库的目录libstatic
)
INSTALL(FILES COPYRIGHT README DESTINATION   doc/cmake/t2) #将文件COPYRIGHT README放到doc/cmake/t2目录下
INSTALL(PROGRAMS run.sh DESTINATION bin) #将sh文件放到bin目录下
INSTALL(DIRECTORY doc/ DESTINATION doc/cmake/t2) #将doc目录下的内容安装到doc/cmake/t2目录下

#执行
cmake -DCMAKE_INSTALL_PREFIX=/home/jb/install/Test
make
make install
1.CMAKE_SOURCE_DIR == PROJECT_SOURCE_DIR
2.CMAKE_BINARY_DIR == PROJECT_BINARY_DIR

3.CMAKE_CURRENT_SOURCE_DIR  #指的是当前处理的 CMakeLists.txt 所在的路径,比如上面我们提到的 src 子目录。
4.CMAKE_CURRRENT_BINARY_DIR  #他指的是 target 编译目录。
5.CMAKE_CURRENT_LIST_FILE #输出调用这个变量的 CMakeLists.txt 的完整路径
6.CMAKE_CURRENT_LIST_LINE #输出这个变量所在的行

7,CMAKE_MODULE_PATH
#这个变量用来定义自己的 cmake 模块所在的路径。如果你的工程比较复杂,有可能会自己
#编写一些 cmake 模块,这些 cmake 模块是随你的工程发布的,为了让 cmake 在处理
#CMakeLists.txt 时找到这些模块,你需要通过 SET 指令,将自己的 cmake 模块路径设
#置一下。比如
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
#这时候你就可以通过 INCLUDE 指令来调用自己的模块了。

8.使用$ENV{NAME}指令就可以调用系统的环境变量了。
#比如
MESSAGE(STATUS “HOME dir: $ENV{HOME})
#设置环境变量的方式是:
SET(ENV{变量名})
1 ,BUILD_SHARED_LIBS
这个开关用来控制默认的库编译方式,如果不进行设置,使用 ADD_LIBRARY 并没有指定库
类型的情况下,默认编译生成的库都是静态库。
如果 SET(BUILD_SHARED_LIBS ON)后,默认生成的为动态库。

3,CMAKE_C_FLAGS
设置 C 编译选项,也可以通过指令 ADD_DEFINITIONS()添加。
4,CMAKE_CXX_FLAGS
设置 C++编译选项,也可以通过指令 ADD_DEFINITIONS()添加。
在这里插入代码片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值