在参考国外资料是,作者常常提供源代码,但源代码中很少涉及我们喜欢的.dsw文件或者.sln文件。以网站IPOL上的源代码为例,我们获得的源代码往往仅仅有:
如:头文件、C++源文件、CMakeList、README等文件。
我们在已知源代码的情况之下,往往需要借助CMakeLists来建立工程和sln,首先,先介绍一下CMakeLists.txt中写的都是什么。
1. 注释
2. 命令语法 COMMAND:
3. 字符串列
5. 流控制结构
常见指令:
ADD_EXECUTABLE
add_exectuable
add_executable(hello ${SRC_LIST})
ADD_LIBRARY
add_library :
add_library(libhello ${LIB_SRC})
add_library(libhello SHARED ${LIB_SRC})
ADD_CUSTOM_TARGET
自定义目标,生成一个自定义文件类型
add_subdirectory :增加子文件夹,2个参数的话就是 源→目标 文件夹生成对应
add_subdirectory(src)
add_subdirectory(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
FIND_PROGRAM
INCLUDE_DIRECTORIES ( "dir1" "dir2" ... )
include_directories
include_directories(${PROJECT_SOURCE_DIR}/libhello)
INSTALL ( FILES “f1” “f2”DESTINATION . )
DESTINATION (目标文件夹)相对于 ${CMAKE_INSTALL_PREFIX}
LINK_DIRECTORIES ("dir1" "dir2")
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
如果是out-of-source方式构建(源代码和生成的中间产物分离),所以要时刻区分这两个变量对应的目录
SET
set (SRC_LIST hello.cpp)
set (APP_SRC main.c)
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET_TARGET_PROPERTIES ( ... ): 设置目标的属性 OUTPUT_NAME, VERSION, ....
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
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)
在CMake官方网站下载最新版CMake软件(http://www.cmake.org/cmake/resources/software.html),并安装:
安装后打开界面如图:
依次选择Source路径和Build路径(选择Build路径之后会让用户输入相应的目标工程格式:IDE环境等),之后点击Configure等待配置,配置结束之后点击Generate键,就可以看见我们需要的.dsw文件或者.sln文件。部分直接生成的.sln文件无法直接使用,这是因为没有了利用到CMakeLists的信息,可以利用修改多工程的启动顺序更改。