欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编写CMakeLists.txt

程序员文章站 2024-02-19 18:45:52
...
1.cmake verson,指定cmake版本 
 cmake_minimum_required(VERSION 3.2)
2.project name,指定项目的名称,一般和项目的文件夹名称对应

PROJECT(server_project)  

3.  MESSAGE(STATUS "Project: SERVER")               #打印相关消息消息

4.set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 指定编译类型

4.include_directiories

比如说,我们需要一个第三方库 curl,那么我们的 CMakeLists.txt 需要指定头文件目录,和库文件,类似:

include_directiories(/usr/include/curl)
target_link_libraries(myprogram path/curl.so)

如果借助于cmake提供的finder:

find_package(CURL REQUIRED)
include_directories(${CURL_INCLUDE_DIR})
target_link_libraries(curltest ${CURL_LIBRARY})

5.LINK_DIRECTORIES(添加需要链接的库文件目录)

link_directories(directory1 directory2 ...)

6.LINK_LIBRARIES (添加需要链接的库文件路径,注意这里是全路径)

LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")

7.add_library

将指定的源文件生成链接文件,然后添加到工程中去

file(GLOB trtSrc src/trt/*.cu src/trt/*.cpp)
add_library(libtrt ${trtSrc} )

8.target_link_libraries

该指令的作用为将目标文件与库文件进行链接。该指令的语法如下:

target_link_libraries(<target> [item1] [item2] [...]
                      [[debug|optimized|general] <item>] ...)

上述指令中的<target>是指通过add_executable()和add_library()指令生成已经创建的目标文件。而[item]表示库文件没有后缀的名字。默认情况下,库依赖项是传递的。当这个目标链接到另一个目标时,链接到这个目标的库也会出现在另一个目标的连接线上。这个传递的接口存储在interface_link_libraries的目标属性中,可以通过设置该属性直接重写传递接口。
9.add_executable 编译可执行文件

add_executable(compute_pnp compute.cpp)