设定输出目录
变量
|
内容
|
备注
|
EXECUTABLE_OUTPUT_PATH
|
可执行文件输出目录
|
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
|
CMAKE_ARCHIVE_OUTPUT_DIRECTORY
|
设置静态库输出目录
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
CMAKE_LIBRARY_OUTPUT_DIRECTORY
|
编译时lib库输出目录
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
|
CMAKE_RUNTIME_OUTPUT_DIRECTORY
|
动态库输出目录
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
|
变量
|
内容
|
备注
|
PROJECT_BINARY_DIR
|
编译输出目录
|
如${PROJECT_SOURCE_DIR}/build
|
PROJECT_SOURCE_DIR
|
代码目录
|
如果直接在代码目录下cmake,那么此变量与PROJECT_BINARY_DIR内容相同
|
CMAKE_INCLUDE_PATH
|
包含头文件目录
|
环境变量,非cmake变量
|
CMAKE_LIBRARY_PATH
|
链接库目录
|
环境变量
|
CMAKE_CURRENT_SOURCE_DIR
|
当前Cmake代码目录
|
当前处理的CMakeLists.txt所在的路径
|
CMAKE_CURRENT_BINARY_DIR
|
target编译目录
|
|
CMAKE_CURRENT_LIST_FILE
|
输出调用这个变量的CMakeLists.txt的完整路径
|
|
CMAKE_CURRENT_LIST_LINE
|
输出这个变量所在的行
|
|
CMAKE_MODULE_PATH
|
定义自己的cmake模块所在的路径
|
|
CMAKE_MODULE_PATH
|
cmake查找cmake模块文件的目录
|
find_package(…)时,在此变量的目录内查找
|
PROJECT_NAME
|
返回通过PROJECT指令定义的项目名称
|
|
CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS
|
用来控制IF ELSE语句的书写方式
|
|
INCLUDE_DIRECTORIES
包含头文件目录
语法:
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 …])
它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用。
include_directories(“dir1” “dir2”)
LINK_DIRECTORIES
link_directories(directory1 directory2 ...)
它相当于g++命令的-L选项的作用,也相当于环境变量中增加LD_LIBRARY_PATH的路径的作用。
link_directories(“dir1” “dir2”)
FIND_LIBRARY
find_library ( name1 [path1 path2 ...])
find_library (
name | NAMES name1 [name2 ...] [NAMES_PER_DIR]
[HINTS path1 [path2 ... ENV var]]
[PATHS path1 [path2 ... ENV var]]
[PATH_SUFFIXES suffix1 [suffix2 ...]]
[DOC "cache documentation string"]
[NO_DEFAULT_PATH]
[NO_CMAKE_ENVIRONMENT_PATH]
[NO_CMAKE_PATH]
[NO_SYSTEM_ENVIRONMENT_PATH]
[NO_CMAKE_SYSTEM_PATH]
[CMAKE_FIND_ROOT_PATH_BOTH |
ONLY_CMAKE_FIND_ROOT_PATH |
NO_CMAKE_FIND_ROOT_PATH]
例子如下:
FIND_LIBRARY(RUNTIME_LIB rt /usr/lib /usr/local/lib NO_DEFAULT_PATH)
cmake会在目录中查找,如果所有目录中都没有,值RUNTIME_LIB就会被赋为NO_DEFAULT_PATH
LINK_LIBRARIES
link_libraries(library1 <debug | optimized> library2 ...)
link_libraries(“/home/server/third/lib/libcommon.a”)
link_libraries(iconv)
link_libraries(${RUNTIME_LIB})
link_libraries("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so")
TARGET_LINK_LIBRARIES
target_link_libraries(<target> [item1 [item2 [...]]]
[[debug|optimized|general] <item>] ...)
target_link_libraries(myProject comm)
target_link_libraries(myProject libcomm.a)
target_link_libraries(myProject libcomm.so)
target_link_libraries(myProject libcomm.so)
target_link_libraries(myProject comm)
target_link_libraries(myProject -lcomm)
文章目录一、CMake介绍二、简单实例二、多源文件目录实例
一、CMake介绍
CMake是一种跨平台的构建工具,通过CMakeLists.txt 文件的编写来实现,其中CMakeLists.txt 文件主要用于生成 Makefile文件(通过“cmake PATH”命令),Makefile文件再通过make 命令进行编译,整个构建过程如下:
编写CmakeLists.txt。
执行“cmake PATH”命令生成 Makefile文件(PATH 是 CMakeLists.txt 文件所在的路径)。
2》打开Cmake工具,如下图所示:
3》点击“Where is the source code”后面的那个“Browse Source...”按钮,选择OpenCV的安装路径。
4》点击“Where to build the binaries”后面的那个“Browse
在 CMake 中,有一些常用的命令和函数可以用来配置和构建项目。以下是一些常见的 CMake 命令和函数:
1. `cmake_minimum_required(VERSION <version>)`:指定需要的最低 CMake 版本。
2. `project(<name>)`:指定项目的名称。
3. `set(<variable> <value>)`:设置变量的值。
4. `add_executable(<name> <source_files>)`:添加一个可执行文件。
5. `add_library(<name> <type> <source_files>)`:添加一个库文件。
6. `target_link_libraries(<target> <libraries>)`:将库文件链接到目标文件。
7. `include_directories(<directory>)`:添加包含目录。
8. `link_directories(<directory>)`:添加链接目录。
9. `add_subdirectory(<directory>)`:添加子目录。
10. `find_package(<package>)`:查找并加载指定的软件包。
11. `if(<condition>)` 和 `endif()`:条件语句块,用于根据条件执行一段代码。
12. `foreach(<var> IN <list>)` 和 `endforeach()`:循环语句块,用于遍历列表中的元素。
这只是一小部分常用的 CMake 命令和函数,CMake 还有很多其他的命令和函数可以用来满足不同项目的需求。你可以根据具体的项目要求和 CMake 文档来选择合适的命令和函数进行配置和构建。