Cmake 安装与使用

在参考国外资料是,作者常常提供源代码,但源代码中很少涉及我们喜欢的.dsw文件或者.sln文件。以网站IPOL上的源代码为例,我们获得的源代码往往仅仅有:


如:头文件、C++源文件、CMakeList、README等文件。

我们在已知源代码的情况之下,往往需要借助CMakeLists来建立工程和sln,首先,先介绍一下CMakeLists.txt中写的都是什么。

1. 注释  # :

2. 命令语法 COMMAND:
    COMMAND(参数1 参数2 ...)

3. 字符串列

    A;B;C           //分号分割或空格分隔的值

4. 变量
       set(Foo a b c)                         // 设置变量 Foo
       command(${Foo})         //等价于 command(a b c)
       command("${Foo}")   // 等价于 command("a b c")
       command("/${Foo}") // 转义,和 a b c无关联

5. 流控制结构
    IF()...ELSE()  /ELSEIF()...ENDIF()
    WHILE()...ENDWHILE()
    FOREACH()...ENDFOREACH()

常见指令:

ADD_EXECUTABLE
add_exectuable  : 工程生成一个可执行文件。
add_executable(hello ${SRC_LIST})  //生成一个名为hello.exe的可执行文件

 

ADD_LIBRARY
add_library :  生成一个库文件。
add_library(libhello ${LIB_SRC})                  //生成libhello.lib文件
add_library(libhello SHARED ${LIB_SRC})  //生成动态库文件

 

ADD_CUSTOM_TARGET
自定义目标,生成一个自定义文件类型

 

add_subdirectory :增加子文件夹,2个参数的话就是 源→目标 文件夹生成对应 
add_subdirectory(src) :建立src子文件夹
add_subdirectory(src bin)  :在cmake目标文件夹中与源文件夹对应 src→bin文件夹

 

ADD_DEPENDENCIES( target1 t2 t3 )
目标target1依赖于t2 t3

 

ADD_DEFINITIONS( "-Wall -ansi")
本意是供设置 -D... /D... 等编译预处理需要的宏定义参数,对比 REMOVE_DEFINITIONS()

 

AUX_SOURCE_DIRECTORY ( “sourcedir” variable)
收集目录中的文件名并赋值给变量

 

EXEC_PROGRAM ( bin [work_dir] ARGS <..> [OUTPUT_VARIABLE var] [RETURN_VALUE var] )
 执行外部程序

 

FILE ( WRITE|READ|APPEND|GLOB| GLOB_RECURSE|REMOVE|MAKE_DIRECTORY ...)
文件操作

 

FIND_FILE
FIND_PATH
FIND_LIBRARY
FIND_PACKAGE
    上述4个注意 CMAKE_LIBRARY_PATH

 

FIND_PROGRAM

 

INCLUDE_DIRECTORIES ( "dir1" "dir2" ... )
include_directories  : 包含指定目录下的指定文件夹
include_directories(${PROJECT_SOURCE_DIR}/libhello)  //包含当前目录下的libhello文件夹

 

INSTALL ( FILES “f1” “f2”DESTINATION . )
DESTINATION (目标文件夹)相对于 ${CMAKE_INSTALL_PREFIX}
 
LINK_DIRECTORIES ("dir1" "dir2")
 库文件路径。注意:由于历史原因,相对路径会原样传递给链接器。尽量使用FIND_LIBRARY而避免使用这个。
 
LINK_LIBRARIES ( lib1 lib2 ...)
设置所有目标需要链接的库

 

LIST ( APPEND|INSERT|LENGTH|GET| REMOVE_ITEM|REMOVE_AT|SORT ...)
列表操作

 

MESSAGE (...)  输出信息,方便检查调试

message(${PROJECT_SOURCE_DIR})

 

project

建立一个工程
project   不是强制性的,但最好始终都加上。这一行会引入两个变量
•HELLO_BINARY_DIR 和 HELLO_SOURCE_DIR
同时,cmake自动定义了两个等价的变量
•PROJECT_BINARY_DIR   和  PROJECT_SOURCE_DIR
如果是out-of-source方式构建(源代码和生成的中间产物分离),所以要时刻区分这两个变量对应的目录

 

SET
set (SRC_LIST hello.cpp)  //源文件列表 hello.cpp
set (APP_SRC main.c)       //语义基本同上,具体不太了解
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)  //指定生成hello.exe到目标文件夹

 

SET_TARGET_PROPERTIES ( ... ): 设置目标的属性 OUTPUT_NAME, VERSION, ....
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")  //使libhello.lib输出文件名为hello.exe

 

SEPARATE_ARGUMENTS ( VAR )
转换空格分隔的字符串到列表

 

STRING ( TOUPPER|TOLOWER|LENGTH| SUBSTRING|REPLACE|REGEX ...)
字符串操作

 

TARGET_LINK_LIBRARIES ( target-name lib1 lib2 ...)
target_link_libraries  :  将指定库文件链接到某个执行文件
target_link_libraries(hello libhello)   //将libhello.lib文件链接到hello.exe



在CMake官方网站下载最新版CMake软件(http://www.cmake.org/cmake/resources/software.html),并安装:

安装后打开界面如图:




依次选择Source路径和Build路径(选择Build路径之后会让用户输入相应的目标工程格式:IDE环境等),之后点击Configure等待配置,配置结束之后点击Generate键,就可以看见我们需要的.dsw文件或者.sln文件。部分直接生成的.sln文件无法直接使用,这是因为没有了利用到CMakeLists的信息,可以利用修改多工程的启动顺序更改。

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值