使用 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