内部编译
外部编译
mkdir build && cd build
cmake .. && cmake --build .
• Debug: 通常一个典型的debug构建包含调试信息,没有被优化等;
• Release: 没有调试信息和完全优化的release构建;
• RelWithDebInfo:: 和release一样,但具有调试信息;
• MinSizeRel: 针对大小特殊优化的release;
#cmake 命令行传入编译类型
cmake -DCMAKE_BUILD_TYPE=debug ..
cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
set(varName value [PARENT_SCOPE])
#根目录CMakeLists.txt
set(numVar 10)
message(STATUS ${numVar}) # 10
add_subdirector(src)
message(STATUS ${numVar}) # 10,还是输出10
#parent_scope
add_subdirector(math)
message(STATUS ${numVar}) #20
#function
function(func arg1 isUpdate)
message(STATUS ${numVar}) # 20
if (not isUpate)
set(arg 30)
else
set(arg 30 PARENT_SCOPE)
endif()
message(STATUS "${numVar}")
endfunction()
func(numVar, false)
message(STATUS "${numVar}") #20
func(numVar, true)
message(STATUS "${numVar}") #30
#src子目录CMakeLists.txt
message(STATUS ${numVar}) # 10,可以直接访问numVar变量
set(numVar 20)
#math子目录CMakeLists.txt
message(STATUS ${numVar}) # 10,可以直接访问numVar变量
set(numVar 20 PARENT_SCOPE) #相当于引用或指针赋值,父级可访问修改后的值
cache变量
set(varName value CACHE type decription [FORCE]), 未添加FORCE,优先从cache中获取变量值,没有则将值设置到cache中;env 变量
set(ENV{varName} value)message(STATUS $ENV{varName})set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)find_package()命令在顶层CMakeLists.txt的cmake目录下查找Findxxx.cmake文件#find header position
find_path(third_INCLUDE_DIR
mymath.h #头文件
"C:\\third" #指定头文件查找位置
)
#find lib position
find_library(third_LIBRARY
third
"C:\\third\\Debug"
)
#设置third相关变量,调用方使用
if (third_INCLUDE_DIR AND third_LIBRARY)
set(third_FOUND TRUE)
set(third_LIBRARIES ${third_LIBRARY})
set(third_INCLUDE_DIRS ${third_INCLUDE_DIR})
else()
set(third_FOUND FALSE)
message(WARNING "third not found")
endif()
#根据quiet or requied打印错误信息
if(third_FOUND)
#third_FIND_QUIETLY对应于quiet
if (NOT third_FIND_QUIETLY)
message(STAUTS "Found third lib:${third_LIBRARIES}")
endif()
else()
#未找到
#third_FIND_REQUIRED对应于required
if (third_FIND_REQUIRED)
message(FATAL_ERROR "could not find third")
endif()
endif()
#使用find_package
find_package(third requied) #没找到报错
if (third_FOUND)
include_directories(${third_INCLUDE_DIRS})
add_execute(Test Test.cpp)
target_link_libraries(Test ${third_LIBRARIES})
endif()