cmake使用总结

官方文档CMake Reference Documentation — CMake 3.7.2 Documentation

CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),输出各种各样的makefile或者project文件。CMake”这个名字是“cross platform make”的缩写。

  1. $> cmake ../sdk -Ddebug=ON

  2. $> make

  3. $> make install

第一条命令用于根据路径../sdk下的CMakeLists.txt生成Makefile文件;第二条命令执行Makefile文件,编译程序,生成可执行文件;第三条命令安装生成的可执行文件。
“#”后面为注释的内容。
CMakeLists.txt中的命令可以全部大写,或者全部小写。
# 指定工程名 e.g. 指定本工程的工程名为test_math

project(test_math)

# 定义变量 e.g. 定义SLNDIR变量,变量值为../../。变量的使用方法为${variable name}

set(SLNDIR ../../)

# 从文件加载CMake命令 e.g. 加载../../prj.mak/sp.cmake文件的所有命令

include(${SLNDIR}prj.mak/sp.cmake)

# 添加包含路径,编译器能这些路径中寻找头文件 e.g. 添加两个路径

include_directories (${SLNDIR}src/include ${SLNDIR}src/3rd/include )

# 添加可执行文件。从源文件source1, source2...生成可执行文件name

add_executable(<name> [WIN32] [MACOSX_BUNDLE]
               [EXCLUDE_FROM_ALL]
               source1 [source2 ...])

# 添加库。从源文件source1, source2...生成库name(静态库,动态库)

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            source1 [source2 ...])

# 显示信息

message([<mode>] "message to display" ...)

# 添加build子文件夹。告诉CMake执行source_dir下的 CMakeLists.txt文件,编译source_dir中的源代码

add_subdirectory(source_dir [binary_dir]
                 [EXCLUDE_FROM_ALL])

#  收集所有的源文件。将dir路径下的所有源文件都存储在variable中

aux_source_directory(<dir> <variable>)

# 设置链接库的搜索路径。相当于gcc中的-L(大写L)

Specify directories in which the linker will look for libraries.

link_directories(directory1 directory2 ...)

# 设置链接库。该命令之后的所有target都要链接该命令中设置的库

Link libraries to all targets added later.

link_libraries([item1 [item2 [...]]] [[debug|optimized|general] <item>] ...)

# 设置预编译宏。e.g. Debug模式下add_definitions(-g -D_DEBUG); Release模式下add_definitions(-DNDEBUG -O2)

add_definitions(-DFOO -DBAR ...)

# 用户可选择的选项。option(debug "is debug mode?" OFF).可以通过-D选择不同的选项。如cmake ../source -Ddebug=ON;cmake ../source -Ddebug=OFF

option(<option_variable> "help string describing option" [initial value])

option_variable可以通过${option_variable}进行访问,其值为ON或者OFF

# 设置变量,取消变量

set (CMAKE_DEBUG_POSTFIX "d")  #设置debug模式时,输出产物名加后缀d

unset (CMAKE_DEBUG_POSTFIX) # 取消CMAKE_DEBUG_POSTFIX变量的设置

# 逻辑判断

if(<variable>)

if(NOT <expression>)

if(<expr1> AND <expr2>)

if(<expr1> OR <expr2>)

if(DEFINED <variable>)

if((expression) AND (expression OR (expression)))

if(<variable|string> MATCHES regex)if(<variable|string> LESS <variable|string>)if(<variable|string> GREATER <variable|string>)if(<variable|string> EQUAL <variable|string>)if(<variable|string> STRLESS <variable|string>)if(<variable|string> STRGREATER <variable|string>)if(<variable|string> STREQUAL <variable|string>)

cmake操作系统平台的判断

  1. MESSAGE(STATUS "operation system is ${CMAKE_SYSTEM}") 
  1. IF (CMAKE_SYSTEM_NAME MATCHES "Linux")  
  2.     MESSAGE(STATUS "current platform: Linux ")  
  3. ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Windows")  
  4.     MESSAGE(STATUS "current platform: Windows")  
  5. ELSEIF (CMAKE_SYSTEM_NAME MATCHES "FreeBSD")  
  6.     MESSAGE(STATUS "current platform: FreeBSD")  
  7. ELSE ()  
  8.     MESSAGE(STATUS "other platform: ${CMAKE_SYSTEM_NAME}")  
  9. ENDIF (CMAKE_SYSTEM_NAME MATCHES "Linux")  
  1. IF (WIN32)  
  2.     MESSAGE(STATUS "Now is windows")  
  3. ELSEIF (APPLE)  
  4.     MESSAGE(STATUS "Now is Apple systens.")  
  5. ELSEIF (UNIX)  
  6.     MESSAGE(STATUS "Now is UNIX-like OS's. Including aPPLE os x  and CygWin")  
  7. ENDIF () 
CMake注意事项:
1.使用set设置CMAKE_CXX_FLAGS等变量时不要覆盖,尽量保留系统默认的一些值,在这些值后面添加就行了。例如:
set(LOCAL_CXX_FLAGS "-fPIC -fPE")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${LOCAL_CXX_FLAGS}")
CMake调用openmp
 
  1. FIND_PACKAGE( OpenMP REQUIRED)  
  2. if(OPENMP_FOUND)  
  3. message("OPENMP FOUND")  
  4. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")  
  5. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")  
  6. set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") 
  7. set(CMAKE_SHARE_LINKER_FLAGS "${CMAKE_SHARE_LINKER_FLAGS} ${OpenMP_SHARE_LINKER_FLAGS}")
  8. endif()  
交叉编译

6.1     基本概念

宿主机host是执行编译、链接嵌入式软件的计算机;目标机target是运行嵌入式软件的硬件平台。通常我们用的PC机(window系统或者liunx系统)就是宿主机,而客户使用的车机(QNX系统)、手机(Andorid系统)则是目标机。

在宿主机host上要生成目标机target的程序就是交叉编译。交叉编译时需要修改以下内容:

Ø  修改编译器;

Ø  修改依赖库;

Ø  修改头文件;

使用CMake进行交叉编译就是要告诉CMake目标机target是什么平台、使用什么编译器、到哪里寻找依赖库、到哪里寻到头文件。CMake使用一些内建变量定义上述内容。

Ø  CMAKE_SYSTEM_NAME: 即你目标机target所在的操作系统名称,比如ARM或者Linux你就需要写"Linux",如果Windows平台你就写"Windows",如果你的嵌入式平台没有相关OS你即需要写成"Generic",只有当CMAKE_SYSTEM_NAME这个变量被设置了,CMake才认为此时正在交叉编译,它会额外设置一个变量CMAKE_CROSSCOMPILING为TRUE.

Ø  CMAKE_C_COMPILER: 顾名思义,即C语言编译器,这里可以将变量设置成完整路径或者文件名,设置成完整路径有一个好处就是CMake会去这个路径下去寻找编译相关的其他工具比如linker,binutils等,如果你写的文件名带有arm-elf等等前缀,CMake会识别到并且去寻找相关的交叉编译器。

Ø  CMAKE_CXX_COMPILER: 同上,此时代表的是C++编译器

Ø  CMAKE_FIND_ROOT_PATH: 代表了一系列的相关文件夹路径的根路径的变更

Ø  CMAKE_FIND_ROOT_PATH_MODE_PROGRAM: 对FIND_PROGRAM()起作用,有三种取值,NEVER,ONLY,BOTH,第一个表示不在你CMAKE_FIND_ROOT_PATH下进行查找,第二个表示只在这个路径下查找,第三个表示先查找这个路径,再查找全局路径,对于这个变量来说,一般都是调用宿主机的程序,所以一般都设置成NEVER

Ø  CMAKE_FIND_ROOT_PATH_MODE_LIBRARY: 对FIND_LIBRARY()起作用,表示在链接的时候的库的相关选项,因此这里需要设置成ONLY来保证我们的库是在交叉环境中找的.

Ø  CMAKE_FIND_ROOT_PATH_MODE_INCLUDE: 对FIND_PATH()和FIND_FILE()起作用,一般来说也是ONLY

与交叉编译相关的这些变量如何传递给CMake了?最为方便的一个方法就是将相关的变量设置都放进一个文件(cmake脚本)中去,然后将该文件通过CMAKE_TOOLCHIAIN_FILE传递给CMake, 例如:

cmake-DCMAKE_TOOLCHIAIN_FILE="/path/to/toolchain-file" ..

6.2    附上一个CMake官方文档中的toolchian-file的小例子,这样我们就会对如何写toolchain-file文件有了感性认识:

# this one is important

SET(CMAKE_SYSTEM_NAMELinux)

#this one not so much

SET(CMAKE_SYSTEM_VERSION 1)

# specify the crosscompiler

SET(CMAKE_C_COMPILER   /opt/eldk-2007-01-19/usr/bin/ppc_74xx-gcc)

SET(CMAKE_CXX_COMPILER/opt/eldk-2007-01-19/usr/bin/ppc_74xx-g++)

# where is the targetenvironment

SET(CMAKE_FIND_ROOT_PATH  /opt/eldk-2007-01-19/ppc_74xx/home/alex/eldk-ppc74xx-inst)

# search for programs inthe build host directories

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAMNEVER)

# for libraries and headersin the target directories

SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARYONLY)

SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

6.3    编译生成Android平台上的程序,需要用到GOOGLE为我们提供了的Android NDK用来做Native(C/C++)的build。Android NDK中包含了整套的编译器、系统库、头文件、调试器等。

使用CMake交叉编译Android平台上的程序,就需要:

Ø  指明目标平台为Android

Ø  指明目标硬件是ARM还是X86

Ø  指明ndk level version

Ø  用ndk提供的编译器

Ø  从ndk安装目录搜寻依赖库和头文件

我们可以自己动手编写toolchain-file,设置相应的变量。这也比较麻烦。

幸运的是,我们有Android-cmake项目可以帮忙。该项目生成了一个名为android.toolchain.cmake的toolchain-file文件,该文件帮我们设置了大部分的变量。我们需要做的就是指定cmake的toolchain file为这个项目里面的android.toolchain.cmake文件,然后设置好Android NDK路径即可。

# Usage Linux:

export ANDROID_NDK=/absolute/path/to/the/android-ndk

mkdir build && cdbuild

cmake-DCMAKE_TOOLCHAIN_FILE=path/to/the/android.toolchain.cmake ..

make -j8

make install

# Usage Windows:

SETANDROID_NDK=C:\absolute\path\to\the\android-ndk

mkdir build && cdbuild

cmake.exe -G"MinGWMakefiles" ^

 -DCMAKE_TOOLCHAIN_FILE=path\to\the\android.toolchain.cmake ^

 -DCMAKE_MAKE_PROGRAM="%ANDROID_NDK%\prebuilt\windows\bin\make.exe"^

  ..

cmake.exe --build . --target install--clean-first

附录:Visual Studio属性与对应cmakelists实现方法:

注意:此附录仅为beta版本,有些条目是推导出来的。

 http://blog.csdn.net/xum2008/article/details/7268761

Visual StudioCmake
Project Referenceadd_dependencies()
General/Output Directory
Debugging/Working DirectoryCMAKE can’t set this value, because the info not stored in project file but some intermedia file generated by visual studio
c/c++GeneralAdditional Include Directoriesinclude_directories()
Resolve #using ReferencesDon’t know
Debug Information FormatCMAKE FAQ 
set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") 
set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") 
Change the default flags for specific config.
Common language runtime supportset_target_properties( target PROPERTIES COMPILE_FLAGS “/clr”) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/clr:pure”) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/clr:safe”) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/clr:oldSynax”)
Suppress Startup Bannerset_target_properties( target PROPERTIES COMPILE_FLAGS “/nologo” )
Warning Levelset_target_properties( target PROPERTIES COMPILE_FLAGS “/W0” ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/W1” ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/W2” ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/W3” ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/W4" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Wall” )
Treat Warnings As Errorsset_target_properties( target PROPERTIES COMPILE_FLAGS “/WX-" ) #No 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/WX" )  #Yes
Multi-processor Compilationset_target_properties( target PROPERTIES COMPILE_FLAGS “/MP" )  #Yes 
#Don’t set means No
Use Unicode For Assembler Listingset_target_properties( target PROPERTIES COMPILE_FLAGS “/FAu" ) #yes 
#Don’t set means no
OptimizationOptimizationset(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") 
set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT/O1 /Ob1 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2/Ob2 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") 
Change the default flags for specific config.
Inline Function Expansionset(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG /MTd /Zi /Ob0 /Od /RTC1") 
set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT /O1 /Ob1 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") 
Change the default flags for specific config.
Enable Intrinsic Functionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/Oi" ) #yes 
#Don’t set means no
Favor Size or Speedset_target_properties( target PROPERTIES COMPILE_FLAGS “/Os" ) #size 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Ot" ) #speed 
#Don’t set means neither
Omit Frame Pointersset_target_properties( target PROPERTIES COMPILE_FLAGS “/Oy-" ) #no 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Oy" ) #yes
Enable Fiber-safe Optimizationsset_target_properties( target PROPERTIES COMPILE_FLAGS “/GT" ) #yes 
#not setting means no
Whole Program Optimizationset_target_properties( target PROPERTIES COMPILE_FLAGS “/GL" ) #yes 
#not setting means no
PreprocessorPreprocessor Definitionsset_target_properties( target PROPERTIES COMPILE_DEFINITIONS DEFNAME=DEFVAL ) 
set_source_files_properties( filename.cpp PROPERTIES COMPILE_DEFINITIONS DEFNAME=DEFVAL )
Undefine Preprocessor Definitionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/UDEFNAME" )
Undefine All Preprocessor Definitionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/u" )
Ignore Standard Include Pathset_target_properties( target PROPERTIES COMPILE_FLAGS “/X" )
Preprocess to a Fileset_target_properties( target PROPERTIES COMPILE_FLAGS “/P" )
Preprocess Suppress Line Numbersset_target_properties( target PROPERTIES COMPILE_FLAGS “/EP" )
Keep Commentsset_target_properties( target PROPERTIES COMPILE_FLAGS “/C" )
Code GenerationEnable String Poolingset_target_properties( target PROPERTIES COMPILE_FLAGS “/GF" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/GF-" ) #no
Enable Minimum Rebuildset_target_properties( target PROPERTIES COMPILE_FLAGS “/Gm" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Gm-" )#no
Enable C++ Exceptionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/EHsc" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/EHa" ) #yes, with SEH exceptions 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/EHs" ) #yes, with extern C functions 
#not setting means no
Smaller Type Checkset_target_properties( target PROPERTIES COMPILE_FLAGS “/RTCc" ) #yes 
#not setting means no
Basic Runtime Checksset_target_properties( target PROPERTIES COMPILE_FLAGS “/RTCs" ) #Stack frame check 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/RTCu" ) #Uninitialized Variable 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/TRC1" ) #Both 
#not setting means no
Runtime LibraryCMAKE FAQ 
set(CMAKE_C_FLAGS_DEBUG_INIT "/D_DEBUG/MTd /Zi /Ob0 /Od /RTC1") 
set(CMAKE_C_FLAGS_MINSIZEREL_INIT "/MT/O1 /Ob1 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELEASE_INIT "/MT /O2 /Ob2 /D NDEBUG") 
set(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "/MT /Zi /O2 /Ob1 /D NDEBUG") 
Change the default flags for specific config.
Struct Member Alignmentset_target_properties( target PROPERTIES COMPILE_FLAGS “/Zp1" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Zp2" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Zp4" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Zp8" )set_target_properties( target PROPERTIES COMPILE_FLAGS “/Zp16" )
Buffer Security Checkset_target_properties( target PROPERTIES COMPILE_FLAGS “/GS" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/GS-" ) #no
Enable Function-Level Linkingset_target_properties( target PROPERTIES COMPILE_FLAGS “/Gy" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Gy-" ) #no
Enable Enhaunced Instruction Setset_target_properties( target PROPERTIES COMPILE_FLAGS “/arch:SSE" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/arch:SSE2" )
Floating Point Modelset_target_properties( target PROPERTIES COMPILE_FLAGS “/fp:precise" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/fp:strict" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/fp:fast" )
Enable Floating Point Exceptionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/fp:except" )
Create Hotpatchable Imageset_target_properties( target PROPERTIES COMPILE_FLAGS “/hotpatch" )
LanguageDisable Language Extensionsset_target_properties( target PROPERTIES COMPILE_FLAGS “/Za" )
Treat Wchar_t As Built in Typeset_target_properties( target PROPERTIES COMPILE_FLAGS “/Zc:wchar_t" )#yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/Zc:wchar_t-" ) #no
Force Conformance in For Loop Scope
Enable Run-Time Type Informationset_target_properties( target PROPERTIES COMPILE_FLAGS “/GR" ) #yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/GR-" ) #no
Open MP Supportset_target_properties( target PROPERTIES COMPILE_FLAGS “/openmp" )#yes 
set_target_properties( target PROPERTIES COMPILE_FLAGS “/openmp-" )#no
PreCompiled HeaderPreCompiled Headerset_target_properties( target PROPERTIES COMPILE_FLAGS "/Yc" ) #create 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/Yu" ) #use 
#not setting means no
PreCompiled Header Fileset_target_properties( target PROPERTIES COMPILE_FLAGS "/Ycstdafx.h" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/Yustdafx.h" )
Precompiled Header output Fileset_target_properties( target PROPERTIES COMPILE_FLAGS "/FpPathAndName.pch" )
Output FilesExpand Attributed Sourceset_target_properties( target PROPERTIES COMPILE_FLAGS "/Fx" )
Assembler Outputset_target_properties( target PROPERTIES COMPILE_FLAGS "/FA" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/FAc" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/FAs" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/FAcs" ) 
#not setting means no list
ASM List Locationset_target_properties( target PROPERTIES COMPILE_FLAGS "/FaDebug" )
Object File nameset_target_properties( target PROPERTIES COMPILE_FLAGS "/FoName.obj" )
Program DataBase File Nameset_target_properties( target PROPERTIES COMPILE_FLAGS "/FdC:/Debug/good.pdb" )
Generate XML Documentation Filesset_target_properties( target PROPERTIES COMPILE_FLAGS "/doc" )
XML Documentation Filenameset_target_properties( target PROPERTIES COMPILE_FLAGS "/docDocument.xml" )
Browse InformationEnable Browse Informationset_target_properties( target PROPERTIES COMPILE_FLAGS "/FR" )
Browse Information Fileset_target_properties( target PROPERTIES COMPILE_FLAGS "/FRfilename" )
AdvancedCalling Conventionset_target_properties( target PROPERTIES COMPILE_FLAGS "/Gd" ) #_cdecl 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/Gr" )  #_fastcall 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/Gz" ) #_stdcall
Compile Asset_target_properties( target PROPERTIES LINKER_LANGUAGE "CXX" ) #C++ 
set_target_properties( target PROPERTIES LINKER_LANGUAGE "C" ) #C 
or 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/TP" ) #CXX 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/TC" ) #C
Disable Specific Warningsset_target_properties( target PROPERTIES COMPILE_FLAGS "/wd4710" )
Forced Include Fileset_target_properties( target PROPERTIES COMPILE_FLAGS "/FIinclude.h" )
Forced #using Fileset_target_properties( target PROPERTIES COMPILE_FLAGS "/FUname" )
Show Includesset_target_properties( target PROPERTIES COMPILE_FLAGS "/showIncludes" )
Use full Pathsset_target_properties( target PROPERTIES COMPILE_FLAGS "/FC" )
Omit Default Library nameset_target_properties( target PROPERTIES COMPILE_FLAGS "/ZI" )
Internal Compiler Error Reportingset_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:queue" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:none" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:prompt" ) 
set_target_properties( target PROPERTIES COMPILE_FLAGS "/errorReport:send" )
Treat Specific Warnings as ErrorsDon't know
LinkerGeneralOutput File#normal case 
set_target_properties( target PROPERTIES OUTPUT_NAME "Helloworld" ) 
set_target_properties( target PROPERTIES PREFIX "lib" ) 
set_target_properties( target PROPERTIES SUFFIX "lib" ) 

#for debug version 
set_target_properties( target PROPERTIES DEBUG_OUTPUT_NAME "Helloworld" ) 
set_target_properties( target PROPERTIES DEBUG_PREFIX "lib" ) 
set_target_properties( target PROPERTIES DEBUG_SUFFIX "lib" ) 

#For dlls 
set_target_properties( target PROPERTIES OUTPUT_NAME "Helloworld" ) 
set_target_properties( target PROPERTIES IMPORT_PREFIX "lib" ) 
set_target_properties( target PROPERTIES IMPORT_SUFFIX "lib" ) 
set_target_properties( target PROPERTIES PREFIX "bin" ) 
set_target_properties( target PROPERTIES SUFFIX "dll" ) 

#output path
Show Progressset_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:Lib" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:ICF" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:REF" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:SAFESEH" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/VERBOSE:CLR" ) 
#not setting means no
Versionset_target_properties( target PROPERTIES VERSION 0.1.2.3)
Enable Incremental Linkingset_target_properties( target PROPERTIES LINK_FLAGS "/INCREMENTAL" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/INCREMENTAL:NO" ) 

set( CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL" ) 
set( CMAKE_EXE_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO" )
Suppress Startup Bannerset_target_properties( target PROPERTIES LINK_FLAGS "/NOLOGO" )
Ignore Import LibraryDon't know
Register OutputDon't know
Per-user RedirectionDon't know
Additional Library Directorieslink_directories( dir1 dir2 ) 

set_target_properties( target PROPERTIES LINK_FLAGS "/LIBPATH:dir1 /LIBPATH:dir2" )
Link Library DependenciesDon't know
Use Library Dependency InputsDon't know
Link Statusset_target_properties( target PROPERTIES LINK_FLAGS "/LTCG:STATUS" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/LTCG:NOSTATUS" )
Prevent DLL Bindingset_target_properties( target PROPERTIES LINK_FLAGS "/ALLOWBIND:NO" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/ALLOWBIND:YES" )
Treat Linker Warnings As Errorsset_target_properties( target PROPERTIES LINK_FLAGS "/WX" )
Force File Outputset_target_properties( target PROPERTIES LINK_FLAGS "/FORCE" )
Create Hot Patchable Imageset_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN" ) 
set_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN:16" ) #Itanium only 
set_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN:6" ) #x64 only 
set_target_properties( target PROPERTIES LINK_FLAGS "/FUNCTIONPADMIN:5" ) #x86 only
Specify Section AttributesDon't know
InputAdditional Dependanciestarget_link_libraries( target item1 item2 )
Ignore All Default Librariesset_target_properties( target PROPERTIES LINK_FLAGS "/NODEFAULTLIB" )
Put files into folderssource_group( header FILES includeme.h )

CMake在Mac中的安装:
http://blog.csdn.net/baiyu9821179/article/details/54632135

安装cmake command line tool 的方法:

sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install

使用CMake的file()函数可以操作文件, 如读取文件内容、写文件

在写文件的时候,会将形如${var}字符串替换成CMAKE中的变量

如果确实需要写入${var}字符串,则需要进行转义。转义方法:在$符号前加转义符,例如:

\${var}
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值