Cmake使用语法
设置编译类型:
1.可执行命令: add_executable()
add_executable(zipapp zipapp.cpp)
zipapp链接可执行文件ziapp.cpp
2.指定编译包含源文件:
add_library(archive x1.cpp x2.cpp x3.cpp)
archive被定义为一个static库,包含编译对象:x1.cpp、x2.cpp、x3.cpp,并且add_library默认生成静态库,add_library(common SHARED …)为动态库
3.建立依赖:target_link_libraries()
target_link_libraries(zipapp archive)
链接zipapp可执行文件,将archive链接静态库
搜索查找
- 搜索所有cpp文件:
aux_source_directory(xxx xxx)
搜索当前目录所有.cpp文件并且存储到一个变量中
2. 自定义搜索规则:
file(GLOB SRC_LIST "*.cpp" "protocol/*.cpp")
add_library(demo ${SRC_LIST})
- 查找指定库文件
find_library( # 设置路径变量名称
log-lib
# 指定你想要的cmake找到的ndk的名称
log )
类似的命令还有 find_file()、find_path()、find_program()、find_package()。
设置目录
- 设置包含目录(include文件地址)
include_directories(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/include
)
- 设置链接库搜索目录
link_directories(
${CMAKE_CURRENT_SOURCE_DIR}/libs
)
- 设置target需要链接的库
target_link_libraries( # 目标库
demo
# 目标库需要链接的库
# log-lib 是上面 find_library 指定的变量名
${log-lib} )
windows系统下,系统会根据链接库目录,搜索lib文件。linux下搜索的so、a文件,倘若都存在,优先链接so
4.指定全路径
target_link_libraries(demo libface.a) # 链接libface.a
target_link_libraries(demo libface.so) # 链接libface.so
设置变量
- set直接设置:
set(SRC_LIST main.cpp test.cpp)
add_excutable(demo ${SRC_LIST})