第一个项目
目录结构
C:.
│ CMakeLists.txt
│ main.cxx
│ main.h
│
└─build
主要文件
CMakeLists.txt
cmake_minimum_required(VERSION 3.16) #指定camke的最小版本
project(Test VERSION 1.0) #指定项目名称和版本号
AUX_SOURCE_DIRECTORY(. DIR_SRCS) # 查找当前目录下的所有源文件,并将名称保存到 DIR_SRCS 变量
add_executable(Test main.cxx) #指定可执行文件main.cxx
set(CMAKE_INSTALL_DIR "C:/Program Files/Test") # 指定安装时的路径
install(TARGETS Test
CONFIGURATIONS Debug
RUNTIME DESTINATION ${CMAKE_INSTALL_DIR}/Debug/bin #可执行二进制Test安装到${CMAKE_INSTALL_DIR}/Debug/bin目录
LIBRARY DESTINATION ${CMAKE_INSTALL_DIR}/Debug/dll #动态库安装到${CMAKE_INSTALL_DIR}/Debug/dll目录
ARCHIVE DESTINATION ${CMAKE_INSTALL_DIR}/Debug/lib #静态库安装到${CMAKE_INSTALL_LIBDIR}/Debug/lib目录。
)
install(TARGETS Test
CONFIGURATIONS Release
RUNTIME DESTINATION ${CMAKE_INSTALL_DIR}/Release/bin #可执行二进制Test安装到${CMAKE_INSTALL_DIR}/Release/bin目录
LIBRARY DESTINATION ${CMAKE_INSTALL_DIR}/Release/dll #动态库安装到${CMAKE_INSTALL_DIR}/Release/dll目录
ARCHIVE DESTINATION ${CMAKE_INSTALL_DIR}/Release/lib #静态库安装到${CMAKE_INSTALL_DIR}/Release/lib目录。
)
main.h
#define Tutorial_VERSION_MAJOR "dsfg"
#define Tutorial_VERSION_MINOR "hello world"
main.cpp
#include <iostream>
#include "main.h"
using namespace std;
int main(int argc,char * argv[])
{
if (argc < 2) {
cout<<Tutorial_VERSION_MINOR<<endl;
getchar();
return 1;
};
return 0;
}
编译
进入build目录再执行以下命令
cmake .. #得到 Makefile
cmake --build . #debug模式编译 # 或者cmake --build . -- /p:Configuration=Release 发布版编译
安装
cmake --install . --config Debug # 或cmake --install . --config Release
这里的Debug和Release是CMakeLists.txt文件里CONFIGURATIONS Debug定义的
经常用到的cmake命令
cmake --help #获取帮助
where cmake #查看cmake目录
where cmake-gui
cmake .. #得到 Makefile
cmake --build . #debug模式编译
cmake -G "MinGW Makefiles" .. #指定MinGW 编译 指定资源文件在上一级目录
cmake .. -G "Visual Studio 16 2019" #指定vs2019编译
cmake .. -G "Visual Studio 15 2017" #指定vs2019编译
cmake --build --config Release#发布版编译
cmake --build . -- /p:Configuration=Release #发布版编译
cmake --install . --config Debug #安装
camke命令
- PROJECT(main)
设置项目名称 - CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
设置cmake最新需要的版本 - AUX_SOURCE_DIRECTORY(<dir> <variable>)
该命令会把参数 <dir> 中所有的源文件名称赋值给参数 <variable> 。 - ADD_EXECUTABLE(main ${DIR_SRCS})
使用命令 ADD_EXECUTABLE 指示变量 DIR_SRCS 中的源文件需要编译 成一个名称为 main 的可执行文件。 - ADD_SUBDIRECTORY( src )
ADD_SUBDIRECTORY 指明本项目包含一个子目录 src - TARGET_LINK_LIBRARIES
指明可执行文件 main 需要连接一个名为Test的链接库 。 - ADD_LIBRARY ( Test ${DIR_TEST1_SRCS})
将 src 目录中的源文件编译为共享库。
变量
${PROJECT_SOURCE_DIR} #当前项目所在目录
CMAKE_SOURCE_DIR #当前项目所在目录
_SOURCE_DIR #当前项目所在目录
CMAKE_CURRENT_SOURCE_DIR #指的是当前处理的CMakeLists.txt 所在的路径
CMAKE_CURRRENT_BINARY_DIR #target 编译目录
EXECUTABLE_OUTPUT_PATH 和LIBRARY_OUTPUT_PATH # 分别用来重新定义最终结果的存放目录