本篇将以一个极简的hello程序说明CMakeLists.txt的基本用法。
//hello.cpp
#include
int main()
{
std::cout << "Hello, this is my first cmake sample" << std::endl;
return 0;
}
#CMakeLists.txt
cmake_minimum_required (VERSION 3.0.0)
project (cmake_test VERSION 0.0.1)
add_executable (test hello.cpp)
$cmake .
-- The C compiler identification is GNU 5.5.0
-- The CXX compiler identification is Clang 3.8.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc - works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/clang++
-- Check for working CXX compiler: /usr/bin/clang++ - works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/xxx/cmake
运行上述命令后会在当前目录下生成一系列cmake*文件和一个Makefile文件,这个Makefile就是cmake自动产生的下一步编译所需的编译规则文件。
$make
Scanning dependencies of target test
[ 50%] Building CXX object CMakeFiles/test.dir/hello.cpp.o
[100%] Linking CXX executable test
[100%] Built target test
编译完成,从log信息中可以看出生成可执行的目标文件test
$./test
Hello, this is my first cmake sample
cmake_minimum_required是cmake的一个command,其设置项目的最低的cmake版本要求。如果实际环境的cmake版本小于该命令的设置,则报错。
这个命令通常是必要的,且在CMakeLists.txt文件的一开始就使用。(如果有多层目录,那么子目录下的文件可以不要)
用法如下:
cmake_minimum_required(VERSION [...] [FATAL_ERROR])
project命令设置项目的名称,并将其保存在变量PROJECT_NAME中。如果是顶层CMakeLists.txt,还将项目名称存储在变量CMAKE_PROJECT_NAME中。
后面就可以直接用{PROJECT_NAME}或{CMAKE_PROJECT_NAME}命令来获取项目名称。
这个命令在一个项目的CMakeLists.txt中也是必要的。
用法:
project(-NAME> [-name>...])
project(-NAME>
[VERSION [.[.[.]]] ]
[DESCRIPTION ]
[HOMEPAGE_URL ]
[LANGUAGES ...] )
PROJECT_VERSION, PROJECT-NAME_VERSION
PROJECT_VERSION_MAJOR, PROJECT-NAME_VERSION_MAJOR
PROJECT_VERSION_MINOR, PROJECT-NAME_VERSION_MINOR
PROJECT_VERSION_PATCH, PROJECT-NAME_VERSION_PATCH
PROJECT_VERSION_TWEAK, PROJECT-NAME_VERSION_TWEAK
CMAKE_PROJECT_VERSION(仅在顶层有效)
PROJECT_DESCRIPTION, PROJECT-NAME_DESCRIPTION
CMAKE_PROJECT_DESCRIPTION (仅在顶层有效)
PROJECT_HOMEPAGE_URL, PROJECT-NAME_HOMEPAGE_URL
CMAKE_PROJECT_HOMEPAGE_URL (仅在顶层有效)
指定可执行文件名称和使用的源文件。
通常生成的可执行文件必须是全局唯一的,可以只是文件的逻辑名(如:test),也可以带有后缀(如:test.exe)。建议直接使用逻辑名,由cmake根据平台来自动补全,这样会提高代码的跨平台性能。
用法(1):
add_executable( [WIN32] [MACOSX_BUNDLE]
[EXCLUDE_FROM_ALL]
[source1] [source2 ...])
用法(2):
add_executable( IMPORTED [GLOBAL])
可行性文件引用了外部的可执行文件,不是很常用。(至少目前为止我没用过,且没见过哪个项目用过。)
用法(3):
add_executable( ALIAS )
创建一个别名目标,以便name可用于在后续命令中引用target。 name不会作为生成目标出现在生成的构建系统中。target可能不是非全局导入的目标或ALIAS。