共计 2196 个字符,预计需要花费 6 分钟才能阅读完成。
CMake 是一个跨平台、开源的构建工具,它能够主动生成 Makefile 或者 Visual Studio 等 IDE 的工程文件。它可能帮忙开发者更不便地治理我的项目的构建过程,进步我的项目构建的效率。在本文中,咱们将介绍 CMake 罕用的命令以及对应的用法
add_executable
add_executable
命令用于将多个源文件编译成可执行文件。举个例子,假如咱们有两个源文件 main.cpp
和helper.cpp
,它们须要被编译成一个可执行文件myapp
,咱们能够应用上面的代码:
add_executable(myapp main.cpp helper.cpp)
其中,myapp
示意生成的可执行文件的名称,main.cpp
和 helper.cpp
示意源代码文件的名称。如果有多个源代码文件,能够将它们作为参数逐个列出。
add_library
add_library
命令用于将多个源文件编译成动态库或动静库。举个例子,假如咱们有两个源文件 foo.cpp
和bar.cpp
,它们须要被编译成一个动态库libfoobar.a
,咱们能够应用上面的代码:
add_library(foobar STATIC foo.cpp bar.cpp)
其中,foobar
示意生成的库的名称,foo.cpp
和 bar.cpp
示意源代码文件的名称。STATIC
示意生成动态库,SHARED
示意生成动静库,MODULE
示意生成插件库。如果不指定库类型,则默认生成动态库。
target_link_libraries
target_link_libraries
命令用于将一个或多个库链接到可执行文件或其余库中。举个例子,假如咱们须要将 libfoo.a
和libbar.a
链接到可执行文件 myapp
中,咱们能够应用上面的代码:
target_link_libraries(myapp foo bar)
其中,myapp
示意可执行文件或其余库的名称,foo
和 bar
示意须要链接的库的名称。如果有多个库,能够将它们作为参数逐个列出。
include_directories
include_directories
命令用于将头文件门路增加到编译器的搜寻门路中。举个例子,假如咱们须要将 /path/to/include
增加到编译器的头文件搜寻门路中,咱们能够应用上面的代码:
include_directories(/path/to/include)
如果有多个门路,能够将它们作为参数逐个列出。另外,AFTER
和 BEFORE
示意增加的门路在搜寻门路中的地位,SYSTEM
示意增加的门路是零碎头文件门路。
link_directories
link_directories
命令用于将库文件门路增加到链接器的搜寻门路中。举个例子,假如咱们须要将 /path/to/lib
增加到链接器的库文件搜寻门路中,咱们能够应用上面的代码:
link_directories(/path/to/lib)
如果有多个门路,能够将它们作为参数逐个列出。
set
set
命令用于设置变量的值。举个例子,假如咱们须要将变量 MY_VARIABLE
的值设置为hello world
,咱们能够应用上面的代码:
set(MY_VARIABLE "hello world")
其中,MY_VARIABLE
示意变量的名称,hello world
示意变量的值。如果变量的值是一个字符串,须要用引号将其括起来。
if
if
命令用于判断条件是否成立。举个例子,假如咱们须要判断变量 MY_VARIABLE
是否等于hello world
,如果成立,则执行一些操作,咱们能够应用上面的代码:
if(MY_VARIABLE STREQUAL "hello world")
# do something
endif()
其中,MY_VARIABLE
示意判断的条件,STREQUAL
示意字符串相等。如果条件成立,则执行 do something
局部的代码。
endif
endif
命令用于完结 if
语句块。其实,在 CMake 中,所有的控制流语句都须要以 endif
命令完结。举个例子,假如咱们须要判断变量 MY_VARIABLE
是否等于hello world
,如果成立,则打印一条音讯,否则打印另一条音讯,咱们能够应用上面的代码:
if(MY_VARIABLE STREQUAL "hello world")
message("MY_VARIABLE is hello world")
else()
message("MY_VARIABLE is not hello world")
endif()
其中,message
命令用于打印消息。
foreach
foreach
命令用于遍历一个列表,并对其中的每个元素执行雷同的操作。举个例子,假如咱们有一个列表 mylist
,其中蕴含三个元素foo
、bar
和baz
,咱们须要将它们顺次打印进去,咱们能够应用上面的代码:
set(mylist foo bar baz)
foreach(item IN LISTS mylist)
message(${item})
endforeach()
其中,item
示意列表中的元素,mylist
示意须要遍历的列表。LISTS
示意 mylist
是一个列表。
总结
以上是 CMake 罕用的命令,它们能够帮忙咱们更不便地治理我的项目的构建过程,进步我的项目构建的效率。除了上述命令,CMake 还有很多其余的命令和性能,比方条件编译、预处理器定义、编译选项等,能够依据理论须要进行学习和应用。