cmake 构建 Visual Studio C++项目

本文使用Win10 X64,  VS2019

目录: 

1、单/多个文件示例;
2、生成静态库文件示例;
3、编译动态库示例;
4、多个目录示例;
5、使用CMake生成sln项目;
 

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托管与目标文件名类型扩展名: 

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

 

 

 

 

 

 

 

 

 

posted @ 2023-04-08 16:59  suntroop  阅读(273)  评论(0)    收藏  举报