cmake学习(4):cmakelist.txt之命令行(二)

cmakelist.txt之命令行(二)


工程命令

这些命令只适用于CMake工程

add_compile_options
为源文件编译添加编译选项

add_compile_options(<option> ...)

add_custom_command
添加定制的构建规则

add_custom_command(OUTPUT output1 [output2 ...]
                   COMMAND command1 [ARGS] [args1...]
                   [COMMAND command2 [ARGS] [args2...] ...]
                   [MAIN_DEPENDENCY depend]
                   [DEPENDS [depends...]]
                   [BYPRODUCTS [files...]]
                   [IMPLICIT_DEPENDS <lang1> depend1
                                    [<lang2> depend2] ...]
                   [WORKING_DIRECTORY dir]
                   [COMMENT comment]
                   [DEPFILE depfile]
                   [VERBATIM] [APPEND] [USES_TERMINAL]
                   [COMMAND_EXPAND_LISTS])

add_custom_command(TARGET <target>
                   PRE_BUILD | PRE_LINK | POST_BUILD
                   COMMAND command1 [ARGS] [args1...]
                   [COMMAND command2 [ARGS] [args2...] ...]
                   [BYPRODUCTS [files...]]
                   [WORKING_DIRECTORY dir]
                   [COMMENT comment]
                   [VERBATIM] [USES_TERMINAL])

add_custom_target
添加定制的目标

add_custom_target(Name [ALL] [command1 [args1...]]
                  [COMMAND command2 [args2...] ...]
                  [DEPENDS depend depend depend ... ]
                  [BYPRODUCTS [files...]]
                  [WORKING_DIRECTORY dir]
                  [COMMENT comment]
                  [VERBATIM] [USES_TERMINAL]
                  [COMMAND_EXPAND_LISTS]
                  [SOURCES src1 [src2...]])

add_definitions
为源文件的编译添加定义项

add_definitions(-DFOO -DBAR ...)

add_dependencies
为两个层次之间的目标之间添加依赖关系

add_dependencies(<target> [<target-dependency>]...)

add_executable
为工程添加可执行文件

add_executable(<name> [WIN32] [MACOSX_BUNDLE]
               [EXCLUDE_FROM_ALL]
               [source1] [source2 ...])
add_executable(<name> IMPORTED [GLOBAL])
add_executable(<name> ALIAS <target>)               

add_library
添加库文件

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [source1] [source2 ...])
add_library(<name> <SHARED|STATIC|MODULE|OBJECT|UNKNOWN> IMPORTED
            [GLOBAL]) 
add_library(<name> OBJECT <src>...)
add_library(<name> ALIAS <target>)
add_library(<name> INTERFACE [IMPORTED [GLOBAL]])                       

add_subdirectory
添加次级目录

add_subdirectory(source_dir [binary_dir]
                 [EXCLUDE_FROM_ALL])

add_test
添加由ctest运行的test

add_test(NAME <name> COMMAND <command> [<arg>...]
         [CONFIGURATIONS <config>...]
         [WORKING_DIRECTORY <dir>])
add_test(<name> <command> [<arg>...])         

aux_source_directory
在目录下寻找所有的源文件

aux_source_directory(<dir> <variable>)

build_command
获取一个命令行来编译当前工程。大多为了ctest模块的内部使用。

build_command(<variable>
              [CONFIGURATION <config>]
              [TARGET <target>]
              [PROJECT_NAME <projname>] # legacy, causes warning
             )

create_test_sourcelist
为编译test程序创建一个test驱动和源文件列表

create_test_sourcelist(sourceListName driverName
                       test1 test2 test3
                       EXTRA_INCLUDE include.h
                       FUNCTION function)

define_property
定义属性

define_property(<GLOBAL | DIRECTORY | TARGET | SOURCE |
                 TEST | VARIABLE | CACHED_VARIABLE>
                 PROPERTY <name> [INHERITED]
                 BRIEF_DOCS <brief-doc> [docs...]
                 FULL_DOCS <full-doc> [docs...])

enable_language
启用某种编程语言(C++/C/FORTAN)

enable_language(<lang> [OPTIONAL] )

enable_testing
在当前目录下启用testing

enable_testing()

export
为了外部应用而导出文件

export(EXPORT <export-name> [NAMESPACE <namespace>] [FILE <filename>])
export(TARGETS [target1 [target2 [...]]] [NAMESPACE <namespace>]
       [APPEND] FILE <filename> [EXPORT_LINK_INTERFACE_LIBRARIES])

fltk_wrap_ui
创建FLTK用户接口封装器

fltk_wrap_ui(resultingLibraryName source1
             source2 ... sourceN )

get_source_file_property
获取源文件的属性

get_source_file_property(VAR file property)

get_target_property
获取目标文件的属性

get_target_property(VAR target property)

get_test_property
获取test的属性

get_test_property(test property VAR)

include_directories
包含目录

include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])

include_external_msproject
包含外部的微软项目的文件

include_external_msproject(projectname location
                           [TYPE projectTypeGUID]
                           [GUID projectGUID]
                           [PLATFORM platformName]
                           dep1 dep2 ...)

include_regular_expression
包含正则表达式以便检测依赖项

include_regular_expression(regex_match [regex_complain])

install
包括安装目标文件,安装文件,安装目录,安装导出等。

link_directories
链接目录

link_directories(directory1 directory2 ...)

link_libraries
链接库

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

load_cache
从其他CMake工程加载值

load_cache(pathToCacheFile READ_WITH_PREFIX
           prefix entry1...)
load_cache(pathToCacheFile [EXCLUDE entry1...]
           [INCLUDE_INTERNALS entry1...])

project
为整个工程设置名称、版本和语言等。

project(<PROJECT-NAME> [LANGUAGES] [<language-name>...])
project(<PROJECT-NAME>
        [VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
        [DESCRIPTION <project-description-string>]
        [LANGUAGES <language-name>...])

qt_wrap_cpp
穿件QT封装

qt_wrap_cpp(resultingLibraryName DestName
            SourceLists ...)

qt_wrap_ui
创建QT封装接口

qt_wrap_ui(resultingLibraryName HeadersDestName
           SourcesDestName SourceLists ...)

remove_definitions
移除定义

remove_definitions(-DFOO -DBAR ...)

set_source_files_properties
设置源文件属性

set_source_files_properties([file1 [file2 [...]]]
                            PROPERTIES prop1 value1
                            [prop2 value2 [...]])

set_target_properties
设置目标文件属性

set_target_properties(target1 target2 ...
                      PROPERTIES prop1 value1
                      prop2 value2 ...)

set_tests_properties
设置test属性

set_tests_properties(test1 [test2...] PROPERTIES prop1 value1 prop2 value2)

source_group
在IDE工程生成中为源文件定义group。

source_group(<name> [FILES <src>...] [REGULAR_EXPRESSION <regex>])
source_group(TREE <root> [PREFIX <prefix>] [FILES <src>...])

target_compile_definitions
为编译目标添加定义

target_compile_definitions(<target>
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

target_compile_features
为编译器添加额外的特征

target_compile_features(<target> <PRIVATE|PUBLIC|INTERFACE> <feature> [...])

target_compile_options
添加编译选项

target_compile_options(<target> [BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

target_include_directories
为目标添加包含目录

target_include_directories(<target> [SYSTEM] [BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

target_link_libraries
为目标添加链接

target_sources
为目标添加源

target_sources(<target>
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

try_compile
尝试编译整个工程或者源文件

try_compile(RESULT_VAR <bindir> <srcdir>
            <projectName> [<targetName>] [CMAKE_FLAGS <flags>...]
            [OUTPUT_VARIABLE <var>])
`try_compile(RESULT_VAR <bindir> <srcfile|SOURCES srcfile...>
            [CMAKE_FLAGS <flags>...]
            [COMPILE_DEFINITIONS <defs>...]
            [LINK_LIBRARIES <libs>...]
            [OUTPUT_VARIABLE <var>]
            [COPY_FILE <fileName> [COPY_FILE_ERROR <var>]]
            [<LANG>_STANDARD <std>]
            [<LANG>_STANDARD_REQUIRED <bool>]
            [<LANG>_EXTENSIONS <bool>]
            )

try_run
尝试编译并运行整个源文件

try_run(RUN_RESULT_VAR COMPILE_RESULT_VAR
        bindir srcfile [CMAKE_FLAGS <flags>...]
        [COMPILE_DEFINITIONS <defs>...]
        [LINK_LIBRARIES <libs>...]
        [COMPILE_OUTPUT_VARIABLE <var>]
        [RUN_OUTPUT_VARIABLE <var>]
        [OUTPUT_VARIABLE <var>]
        [ARGS <args>...])

猜你喜欢

转载自blog.csdn.net/xholes/article/details/79836461