使用 CMake 生成 Visual Studio 2017 项目

Posted

技术标签:

【中文标题】使用 CMake 生成 Visual Studio 2017 项目【英文标题】:Generating Visual Studio 2017 projects with CMake 【发布时间】:2017-06-24 15:12:48 【问题描述】:

我尝试构建 Mongo C++11 驱动程序以在我的项目中使用。 Mongo 驱动程序编译良好。使用它们的说明坚持认为,在用于自己的项目时,以下代码也应该是我项目的.vcxproj 的一部分(如果使用 Visual Studio,我在 Windows 10 64 位上使用)。

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <LinkIncremental>true</LinkIncremental>
    <IncludePath>c:\local\boost_1_59_0\;C:\mongo-cxx-driver\include\mongocxx\v_noabi;C:\mongo-cxx-driver\include\bsoncxx\v_noabi;C:\mongo-c-driver\include\libmongoc-1.0;C:\mongo-c-driver\include\libbson-1.0;$(IncludePath)</IncludePath>
    <LibraryPath>c:\mongo-c-driver\lib\;c:\mongo-cxx-driver\lib\;$(LibraryPath)</LibraryPath>
  </PropertyGroup>
  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    <ClCompile>
      <PrecompiledHeader>Use</PrecompiledHeader>
      <WarningLevel>Level3</WarningLevel>
      <Optimization>Disabled</Optimization>
      <PreprocessorDefinitions>MONGOCXX_STATIC;BSONCXX_STATIC;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <SDLCheck>true</SDLCheck>
    </ClCompile>
    <Link>
      <SubSystem>Console</SubSystem>
      <GenerateDebugInformation>true</GenerateDebugInformation>
      <AdditionalDependencies>libmongocxx.lib;libbsoncxx.lib;mongoc-static-1.0.lib;bson-1.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>

我需要什么样的代码来确保这段代码自动包含在我由 CMake 生成的 .vcxproj 中? 我的 CMakeLists.txt 如下。

# CMakeLists.txt
# Building the test project
cmake_minimum_required(VERSION 3.7)

project(testing)

set(APP_SOURCES
    test.cpp
)

link_directories(../../installed_mongocxx/lib)
add_executable(testapp $APP_SOURCES)
target_link_libraries(testapp mongocxx bsoncxx)

target_include_directories(testapp PUBLIC 
                            ../../installed_mongocxx/include/mongocxx/v_noabi
                            ../../installed_mongocxx/include/bsoncxx/v_noabi
                            E:/Software/Libraries/Boost/boost_1_64_0
)

install(TARGETS testapp 
        DESTINATION bin)

【问题讨论】:

在你的 CMake 文件中使用相对路径和绝对路径是魔鬼,可以这么说。此外,“软件”的复数形式仍然是“软件”,而不是“软件”。此外,使用link_directories 等非目标命令也不是一个好主意。而是明确指定 target_link_libraries 中的每个库。我能想到的唯一缺少的是定义。对于那些你可以简单地使用target_compile_definitions。看来你的 Google-fu 不是很强大。 @tambre,您是否建议(明确使用 target_link_libraries)可能是解决方案? 可能不相关:您的 CMake 版本对于使用的 Boost 来说太旧了,请参阅 ***.com/a/42124857/2799037 看起来你的 .vcxproj 指定了 boost 1.59,但你的 cmake 文件使用的是 1.64。您确定 .vcxproj 中的目录正确吗?您可能需要更新包含路径和库路径以指向您安装所有内容的位置。 不幸的是,我之前没有尝试从 CMake 链接到 Windows 上的驱动程序,但据我了解,使用 CMake“外部项目”功能 [1] 可能是这里的方法。 [1]:selectiveintellect.net/blog/2016/7/29/… 【参考方案1】:

使用 vcpkg 怎么样?它是一种编译库/驱动程序的简单方法。

按照 git 上的说明下载 vcpkg。 https://github.com/Microsoft/vcpkg

步骤 1 C:\vcpkg>.\vcpkg 搜索 mongodb

你会看到类似的东西

mongo-c-driver 1.6.2-1 用 C 编写的 MongoDB 客户端库。

mongo-cxx-driver 3.1.1-1 MongoDB C++ 驱动程序。

步骤 2 C:.\vcpkg search mongodb install mongo-cxx-driver

然后喝杯咖啡....

步骤 3

C:\vcpkg>.\vcpkg 集成安装

完成..

注意先决条件:

Windows 10、8.1 或 7

Visual Studio 2017 或 Visual Studio 2015 更新 3

然后只需创建一个项目并在项目中添加所需的包含。

@JoyoWaseem 回答

How can I build a program using c++ driver of MongoDB?

【讨论】:

以上是关于使用 CMake 生成 Visual Studio 2017 项目的主要内容,如果未能解决你的问题,请参考以下文章

CMake 为 Win32 和 x64 生成 Visual Studio 2008 解决方案

在 Visual Studio 2017 中使用 Cmake 构建 ssh.dll

检查是不是从 CMake 生成 Visual Studio 解决方案或 Makefile

cmake - 支持 Visual Studio 过滤器

与 CMake 和 Visual Studio 2010 的链接错误

CMake、Ninja 和 Visual Studio 2019 重建一切