导航

windows下CMake使用图文手册 Part 2

Posted on 2016-05-06 04:19  cuiocean  阅读(1106)  评论(0编辑  收藏  举报

例子2:有目录的项目

我现在有个文件夹ProjectDate,有如下文件结构

E:.
│  CMakeLists.txt

├─include
│      Date.h

└─src
        date.cpp
        main.cpp

include文件夹下是头文件Date.h

#ifndef DATE_H
#define DATE_H
 
class Date
{
private:
    int m_year;
    int m_month;
    int m_day;
public:
    Date(int year, int month, int day);
    void SetDate(int year, int month, int day);
    int getYear() { return m_year; }
    int getMonth() { return m_month; }
    int getDay()  { return m_day; }
};
#endif

src文件夹下面是源文件Date.cpp和main.cpp

// Date.cpp
#include "Date.h"
 
// Date constructor
Date::Date(int year, int month, int day)
{
    SetDate(year, month, day);
}
 
// Date member function
void Date::SetDate(int year, int month, int day)
{
    m_month = month;
    m_day = day;
    m_year = year;
}

 

// Main.cpp
#include <iostream>
#include "date.h"

int main()
{
    Date date(2016,05,05);
    std::cout<<"Year:"<<date.getYear()<<" Month:"<<date.getMonth()
    <<" day:"<<date.getDay()<<std::endl;
}

 

CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.5.2)
project(directory_test)
 
#Bring the headers, such as Date.h into the project
include_directories(include)
 
#Can manually add the sources using the set command as follows:
#set(SOURCES src/mainapp.cpp src/Date.cpp)
 
#However, the file(GLOB...) allows for wildcard additions:
file(GLOB SOURCES "src/*.cpp")
 
add_executable(testDate ${SOURCES})

 

  • 第一行已经介绍过,设置CMake最低版本
  • 第二行project命令设置项目名称
  • include_directories() 命令加入头文件所在文件夹
  • set(SOURCES … )可以加入文件到SOURCES变量中,但是你需要一个文件一个文件的单独加入,使用范围比较小,所以被注释掉了
  • 经常使用的是file()命令来把文件加入到项目中。GLOB表示要将后面表达式"src/*.cpp"表示的所有文件加入到SOURCES变量中
  • add_executable使用SOURCES变量生成testDate可执行文件

PROJECT指令的语法是:

PROJECT(projectname [CXX] [C] [Java])
用于定义工程名称,并可指定工程支持的语言,默认表示支持所有语言。

 

这次我们使用cmake命令行,依然建立build文件夹,进入build。首先运行cmake --help看看都有哪些参量可以使用。

 

 

> cmake --help                                                          
Usage                                                                   
                                                                        
  cmake [options] <path-to-source>                                      
  cmake [options] <path-to-existing-build>                              
                                                                        
Specify a source directory to (re-)generate a build system for it in the
current working directory.  Specify an existing build directory to      
re-generate its build system.                                           
                                                                        
Options                                                                 
  -C <initial-cache>           = Pre-load a script to populate the cache.
  -D <var>[:<type>]=<value>    = Create a cmake cache entry.            
  -U <globbing_expr>           = Remove matching entries from CMake cache
  -G <generator-name>          = Specify a build system generator.      
  -T <toolset-name>            = Specify toolset name if supported by   
                                 generator.                             
  -A <platform-name>           = Specify platform name if supported by  
                                 generator.                             
  -Wdev                        = Enable developer warnings.             
  -Wno-dev                     = Suppress developer warnings.           
  -Werror=dev                  = Make developer warnings errors.        
  -Wno-error=dev               = Make developer warnings not errors.    
  -Wdeprecated                 = Enable deprecation warnings.           
  -Wno-deprecated              = Suppress deprecation warnings.         
  -Werror=deprecated           = Make deprecated macro and function warni
                                 errors.                                
  -Wno-error=deprecated        = Make deprecated macro and function warni
                                 not errors.                            
  -E                           = CMake command mode.                    
  -L[A][H]                     = List non-advanced cached variables.    
  --build <dir>                = Build a CMake-generated project binary t
  -N                           = View mode only.                        
  -P <file>                    = Process script mode.                   
  --find-package               = Run in pkg-config like mode.           
  --graphviz=[file]            = Generate graphviz of dependencies, see 
                                 CMakeGraphVizOptions.cmake for more.   
  --system-information [file]  = Dump information about this system.    
  --debug-trycompile           = Do not delete the try_compile build tree
                                 Only useful on one try_compile at a time
  --debug-output               = Put cmake in a debug mode.             
  --trace                      = Put cmake in trace mode.               
  --trace-expand               = Put cmake in trace mode with variable  
                                 expansion.                             
  --warn-uninitialized         = Warn about uninitialized values.       
  --warn-unused-vars           = Warn about unused variables.           
  --no-warn-unused-cli         = Don't warn about command line options. 
  --check-system-vars          = Find problems with variable usage in sys
                                 files.                                 
  --help,-help,-usage,-h,-H,/? = Print usage information and exit.      
  --version,-version,/V [<f>]  = Print version number and exit.         
  --help-full [<f>]            = Print all help manuals and exit.       
  --help-manual <man> [<f>]    = Print one help manual and exit.        
  --help-manual-list [<f>]     = List help manuals available and exit.  
  --help-command <cmd> [<f>]   = Print help for one command and exit.   
  --help-command-list [<f>]    = List commands with help available and ex
  --help-commands [<f>]        = Print cmake-commands manual and exit.  
  --help-module <mod> [<f>]    = Print help for one module and exit.    
  --help-module-list [<f>]     = List modules with help available and exi
  --help-modules [<f>]         = Print cmake-modules manual and exit.   
  --help-policy <cmp> [<f>]    = Print help for one policy and exit.    
  --help-policy-list [<f>]     = List policies with help available and ex
  --help-policies [<f>]        = Print cmake-policies manual and exit.  
  --help-property <prop> [<f>] = Print help for one property and exit.  
  --help-property-list [<f>]   = List properties with help available and
                                 exit.                                  
  --help-properties [<f>]      = Print cmake-properties manual and exit.
  --help-variable var [<f>]    = Print help for one variable and exit.  
  --help-variable-list [<f>]   = List variables with help available and e
  --help-variables [<f>]       = Print cmake-variables manual and exit. 
                                                                        
Generators                                                              
                                                                        
The following generators are available on this platform:                
  Visual Studio 14 2015 [arch] = Generates Visual Studio 2015 project fil
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 12 2013 [arch] = Generates Visual Studio 2013 project fil
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 11 2012 [arch] = Generates Visual Studio 2012 project fil
                                 Optional [arch] can be "Win64" or "ARM".
  Visual Studio 10 2010 [arch] = Generates Visual Studio 2010 project fil
                                 Optional [arch] can be "Win64" or "IA64"
  Visual Studio 9 2008 [arch]  = Generates Visual Studio 2008 project fil
                                 Optional [arch] can be "Win64" or "IA64"
  Visual Studio 8 2005 [arch]  = Generates Visual Studio 2005 project fil
                                 Optional [arch] can be "Win64".        
  Visual Studio 7 .NET 2003    = Generates Visual Studio .NET 2003 projec
                                 files.                                 
  Visual Studio 7              = Deprecated.  Generates Visual Studio .NE
                                 2002 project files.                    
  Visual Studio 6              = Deprecated.  Generates Visual Studio 6 
                                 project files.                         
  Borland Makefiles            = Generates Borland makefiles.           
  NMake Makefiles              = Generates NMake makefiles.             
  NMake Makefiles JOM          = Generates JOM makefiles.               
  Green Hills MULTI            = Generates Green Hills MULTI files      
                                 (experimental, work-in-progress).      
  MSYS Makefiles               = Generates MSYS makefiles.              
  MinGW Makefiles              = Generates a make file for use with     
                                 mingw32-make.                          
  Unix Makefiles               = Generates standard UNIX makefiles.     
  Ninja                        = Generates build.ninja files.           
  Watcom WMake                 = Generates Watcom WMake makefiles.      
  CodeBlocks - MinGW Makefiles = Generates CodeBlocks project files.    
  CodeBlocks - NMake Makefiles = Generates CodeBlocks project files.    
  CodeBlocks - Ninja           = Generates CodeBlocks project files.    
  CodeBlocks - Unix Makefiles  = Generates CodeBlocks project files.    
  CodeLite - MinGW Makefiles   = Generates CodeLite project files.      
  CodeLite - NMake Makefiles   = Generates CodeLite project files.      
  CodeLite - Ninja             = Generates CodeLite project files.      
  CodeLite - Unix Makefiles    = Generates CodeLite project files.      
  Eclipse CDT4 - MinGW Makefiles                                        
                               = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - NMake Makefiles                                        
                               = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - Ninja         = Generates Eclipse CDT 4.0 project files.
  Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.
  Kate - MinGW Makefiles       = Generates Kate project files.          
  Kate - NMake Makefiles       = Generates Kate project files.          
  Kate - Ninja                 = Generates Kate project files.          
  Kate - Unix Makefiles        = Generates Kate project files.          
  Sublime Text 2 - MinGW Makefiles                                      
                               = Generates Sublime Text 2 project files.
  Sublime Text 2 - NMake Makefiles                                      
                               = Generates Sublime Text 2 project files.
  Sublime Text 2 - Ninja       = Generates Sublime Text 2 project files.
  Sublime Text 2 - Unix Makefiles                                       
                               = Generates Sublime Text 2 project files. 
                                                                       

我们想生成Visual Studio 14 2015 Win64项目文件,所以运行

cmake -G "Visual Studio 14 2015 Win64" ..

> cmake -G "Visual Studio 14 2015 Win64" ..
-- The C compiler identification is MSVC 19.0.23918.0
-- The CXX compiler identification is MSVC 19.0.23918.0
-- Check for working C compiler using: Visual Studio 14 2015 Win64
-- Check for working C compiler using: Visual Studio 14 2015 Win64 -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler using: Visual Studio 14 2015 Win64
-- Check for working CXX compiler using: Visual Studio 14 2015 Win64 -- 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: E:/Playground/CMakeExamples/ProjectDate/build

 

msbuild testDate.vcxproj

编译通过,运行

> Debug\testDate.exe
Year:2016 Month:5 day:5