cmake 构建 Visual Studio C++项目
本文使用Win10 X64, VS2019
目录:
1. 单/多个文件 ADD_EXECUTABLE 示例:
1) 首先建立文件夹.CMakeProj\CMakeProject1\src
2) 在文件夹Src中建立两个文件CMakeProject1.cpp和CMakeLists.txt
3) CMakeProject1.cpp:
#include "CMakeProject1.h"
using namespace std;
int main()
{
hello();
cout << "Hello CMake." << endl;
return 0;
}
hello.cpp
using namespace std;
int hello()
{
cout << "Hello World." << endl;
return 0;
}
4) CMakeLists.txt
PROJECT (HELLO)
# 单个文件
# SET (SRC_LIST main.cpp)
# 多个文件
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR}/lib)
SET (SRC_LIST hello.cpp CMakeProject1.cpp)
SET (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
ADD_EXECUTABLE (hello ${SRC_LIST})
# ADD_EXECUTABLE (hello "hello.cpp" "CMakeProject1.cpp" "CMakeProject1.h")
5) 打开:开始 --> Microsoft Visual Studio 2019 --> Visual Studio Tools (工具) --> VS2012 x86 Native Tools Command Prompt (命令行)--> 开发者命令提示/开发者命令PowerShell
本文使用的是PowerShell
6) 进入到CMakeTest/Src目录,执行以下代码mkdir build & cdbuild
cmake .. -G "NMake Makefiles"
nmake

7) build\CMakeProject1\下生成hello.exe。
2.生成"静态"库文件 ADD_LIBRARY 示例
4) CMakeLists.txt
PROJECT (HELLO)
INCLUDE_DIRECTORIES (${PROJECT_SOURCE_DIR}/lib)
SET (SRC_LIBHELLO hello.c)
SET (SRC_APP CMakeProject1.cpp)
SET (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
# 未指定:SHARED,默认生成静态库
ADD_LIBRARY (libhello ${SRC_LIBHELLO})
# 如果想指定生成库的名称,可以添加一句:
SET_TARGET_PROPERTIES(libhello PROPERTIES OUTPUT_NAME "hello")
# SET (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
# ADD_EXECUTABLE (hello ${SRC_APP})
# TARGET_LINK_LIBRARIES(hello libhello)
3.生成"动态"库文件 ADD_LIBRARY SHARED 示例
1) 头文件,定义api接口输出类型。
#ifndef _VISIBILITY_HPP_
#define _VISIBILITY_HPP_
#if defined(_WIN32)
#if defined(LIB_BUILD_SHARED)
#if defined(LIB_BUILD_EXPORTS)
#define LIB_API_EXPORT __declspec( dllexport )
#else
#define LIB_API_EXPORT __declspec( dllimport )
#endif // LIB_BUILD_EXPORTS
#else
#define LIB_API_EXPORT
#endif // LIB_BUILD_SHARED
#else
#define LIB_API_EXPORT
#endif // _WIN32
#endif // _VISIBILITY_HPP_
2)CMakeList.txt 文件
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
SET(SRC_LIB hello.c)
ADD_DEFINITIONS("-DLIB_BUILD_EXPORT")
ADD_LIBRARY(libhello SHARED ${SRC_LIB})
SET(LIBRARY_OUTPUT_PATH${PROJECT_BINARY_DIR}/bin)
5.使用CMake生成sln项目
1) 方法一(GUI):使用cmake-gui, 如下图

2) 方法二(CLI): 使用命令行
cmake -A x64 -G "Visual Studio 16 2019" ..
Ref: (229条消息) cmake -A Win64 -G “Visual Studio 16 2019“ .. 错误_sunarmy的博客-CSDN博客
附录 A Visual Studio 2019 编译CLR 托管C++ 项目的几个关键设置:
一、预处理
1.1 预编译“宏定义”:
【项目】--> 【属性】-- 属性页 --> 【配置属性】--> 【C/C++】--> 【预处理器】-->【预处理器定义】

二、编译 汇编
2.1 编译器c++语言标准:
【项目】--> 【属性】-- 属性页 --> 【配置属性】--> 【C/C++】--> 【语言】-->【C++语言标准】

2.2 指定头文件目录:
【项目】--> 【属性】-- “属性页” --> 【配置属性】--> 【C/C++】--> 【常规】-->【附件包含目录】

三、链接
3.1 指定依赖库所在目录:
方法一、【项目】--> 【属性】-- 属性页 --> 【配置属性】--> 【VC++ 目录】--> 【库目录】

方法二、【项目】--> 【属性】-- 属性页 --> 【配置属性】--> 【连接器】--> 【常规】--> 【附加库目录】

3.2 指定依赖库:
【项目】--> 【属性】-- 属性页 --> 【配置属性】--> 【链接器】--> 【输入】-->【附加依赖项】

3.3 忽略特定依赖库:
【项目】--> 【属性】-- 属性页 --> 【配置属性】--> 【链接器】--> 【输入】-->【附加依赖项】
当出现这样链接错误时:fatal error LNK1104: 无法打开文件“libfastcdrd-1.0.lib”
3.4 输出目录与项目配置类型:
【项目】--> 【属性】-- 属性页 --> 【配置属性】--> 【链接器】--> 【输入】-->【附加依赖项】

3.5 CLR托管与目标文件名类型扩展名:
【项目】--> 【属性】-- 属性页 --> 【配置属性】--> 【链接器】--> 【输入】-->【附加依赖项】

浙公网安备 33010602011771号