未分类

cmake

​ cmake文件内部不需要注意大小写,但是要注意的是cmake的文件名要大小写注意区分清楚,即

CMakeLists.txt

,这个文件建立在你要编译的文件目录下。一般的cmake需要的格式为


#首先规定cmake的版本,前面加‘#’表示这个是注释
cmake_minimum_required(VERSION 2.8)

#接下来是编译的目标名称
project(example)

#然后就是添加编译的项目
add_executable(example test.cpp)
#一般来说如果是用的vim编写的话,用大写,前面的函数字体会变成黄色的

然后这个大致等同于makefile的


GCC = g++
example: again.cpp
        $(GCC) $< -o $@

建立好这个文件后,在terminal中输入


cmake .
make

完成编译。

同时,如果需要添加编译选项,比如,我想添加

-std=c++11

,示例如下


add_compile_options(-std=c++11)

这句等同于makefile里面的


OPTIONS = -std=c++11
example: again.cpp
    $(GCC) $< -o $@ $(OPTIONS)

对于makefile来说,就等同于


g++ again.cpp -o example -std=c++11

添加头文件目录


INCLUDE_DIRECTORIES("./hello")

这句就等同于

g++


g++ -I ./hello

添加链接文件


LINK_DIRECTORIES("./hello")

等同于


g++ -L ./hello

添加链接库,比如像添加

-lpthread
-lgmp

TARGET_LINK_LIBRARIES(example pthread gmp)

这儿完整的CMakeLists.txt内容如下


cmake_minimum_required (VERSION 2.8)

project(example)

add_compile_options(-std=c++11)

LINK_DIRECTORIES("./hello")

INCLUDE_DIRECTORIES("./hello")

ADD_EXECUTABLE(example again.cpp)

TARGET_LINK_LIBRARIES( example pthread gmp)

要注意行文的顺序,首先是版本要求和项目名称要写在前面,再就是添加链接库要写再

ADD_EXECUTABLE

后面,再就是,添加链接文件以及添加头文件目录要写在

ADD_EXECUTABLE

前面,不然的话,

make

的时候会出现

undefined

的问题。

同时,还可以将子文件编译成静态链接库,然后直接调静态链接库。


#自动搜索所有的子目录下的源文件,然后将名称保存在DIR变量
aux_source_directory(. DIR)

#添加hello子目录
add_subdirectory(hello)

#指定生成目标
add_executable(example again.cpp)

#添加链接库
target_link_libraries(example test)

然后在hello目录下创建一个CMakeLists.txt文件


aux_source_directory( . DIR)
#生成链接库
add_library(test ${DIR})

还有些详细的操作,见 https://www.hahack.com/codes/cmake/。

Leave a Reply

邮箱地址不会被公开。 必填项已用*标注