需要示例 CMake 项目,该项目在 Windows 和 Visual Studio 上使用 Xerces-C++ 3
Need sample CMake project that uses Xerces-C++ 3 on Windows with Visual Studio
我正在尝试在Windows 10上使用xerces-c-3.2.2.2,来自xerces-c-3.2.2\samples\src\SAXPrint中的示例,该示例用作Visual Studio 2019项目。
之前,我成功地将xerces-c_2_8_0与xerces-c-src_2_8_0\samples\SAX2Print一起使用为具有Visual Studio配置(不是CMake(的Visual Studio 2019项目。当尝试使用 xerces-c-3.2.2 和相应的示例时,我得到"错误MSB6006:"CL.exe"以代码 2 退出"。
注意:我自己构建了 xerces-c-3.2.2,因为它没有可用的二进制文件。在构建 xerces-c-3.2.2 之后,我在 C:\Xerces\xerces-c-3.2.2\src\Release 中获得了文件 xerces-c_3.exp、xerces-c_3.lib 和 xerces-c_3_2.dll,包含文件位于 C:\Xerces\xerces-c-3.2.2\xerces-c-3.2.2\src 中。
在 https://developercommunity.visualstudio.com/content/problem/405001/error-msb6006-clexe-exited-with-code-2.html,建议使用Clang作为编译器,因为提到的"MSB6006"错误应该是Microsoft尚未修复的编译器错误。要使用Clang,必须在当前版本的Visual Studio中使用CMake(出于其他原因,无论如何我更喜欢CMake(,并且我无法弄清楚如何使用CMake正确设置项目。问题是如何告诉 CMake 关于 Xerces库文件的信息(使用 xerces-c-3.2.2,似乎只有一个库文件 xerces-c_3.lib(。
所以我的顶级CMakeLists.txt(没有链接(是:
cmake_minimum_required (VERSION 3.8)
project ("SAXPrint")
include_directories("C:\Xerces\xerces-c-3.2.2\xerces-c-3.2.2\src")
add_subdirectory ("SAXPrint")
子目录中的 CMakeLists.txt 是
cmake_minimum_required (VERSION 3.8)
add_executable(SAXPrint "SAXPrint.cpp" "SAXPrint.hpp")
(是的,我知道我应该使用绝对路径作为 CMake 的参数,但这不应该是这里的重点。
为了通知CMake有关xerces库文件的信息,我尝试了
link_directories("C:\Xerces\xerces-c-3.2.2\xerces-c-3.2.2\src\Release")
在顶级CMakeLists中.txt我尝试了
target_link_libraries(SAXPrint "C:\Xerces\xerces-c-3.2.2\xerces-c-3.2.2\src\Release")
(最后一个似乎没有被接受,因为Visual Studio然后不断显示消息"生成CMake缓存以刷新"(,并且我已经阅读了一些我不理解的有关CMake"find_library"命令的内容。
我收到的错误消息是
Error LNK2019 unresolved external symbol "__declspec(dllimport) public: static char const * const xercesc_3_2::XMLUni::fgXercescDefaultLocale" (__imp_?fgXercescDefaultLocale@XMLUni@xercesc_3_2@@2QBDB) referenced in function main C:UsersstefansourcereposSAXPrint C:UsersstefansourcereposSAXPrint.cpp.obj 1
因此,任何如何使用Xerces库文件的评论都是非常受欢迎的,但如果有人有一个与Xerces Version 3和Visual Studio 2019一起使用的完整示例CMake项目,那就更好了。我更喜欢CMake项目,因为这似乎是我想完成的更好的选择。谢谢。
我为简单的"SAXPrint"示例找到了一个可行的解决方案,如果您不尝试使用添加整个目录或尝试让 CMake 找到某种已安装的库,它实际上非常简单:
顶级CMakeLists.txt:
cmake_minimum_required (VERSION 3.8)
project(SAXPrint)
add_subdirectory ("SAXPrint")
CMakeLists.txt在子目录"SAXPrint"中,其中包含示例源文件:
cmake_minimum_required (VERSION 3.8)
include_directories("C:\Xerces\xerces-c-3.2.2\xerces-c-3.2.2\src")
add_executable(SAXPrint "SAXPrintHandlers.cpp" "SAXPrint.cpp")
target_link_libraries(SAXPrint "C:\Xerces\xerces-c-3.2.2\xerces-c-3.2.2\src\Release\xerces-c_3.lib")
(是的,应该避免在CMakeList.txt中使用绝对路径,但这是一个单独的问题,应该很容易解决,例如,通过将Xerces的路径作为CMake的参数。
所以我只是给出 Xerces 3 的一个库文件的绝对路径作为target_link_libraries
中的参数。我想,如果我使用另一个库文件,我只会添加另一个路径(所以我为Xerces 2添加了许多使用其中许多的库文件(?但是这些库的依赖关系呢?也许这个解决方案并不是它真正期望的使用方式,我想CMake必须了解依赖项,并且在一般情况下仅提供库文件列表并不能解决它?
请注意,在我的情况下,Xerces 没有以任何方式"安装",它(对于我的意思应该是(只是一个目录,其中包含某些子目录中所需的文件,而没有任何环境变量指向它。所以我想find_package
不是我可以使用的东西,那find_library
呢?
或者如果我只是继续使用target_link_libraries
(实际上应该使用例如find_package
据我了解(应该按什么顺序列出库文件,以便尊重依赖项?
- 将QT项目导入Visual Studio 2019会给我带来很多LNK2001错误
- 如何将 CLion C++ 项目导入 Visual Studio?
- Visual Studio 中的 CMake 项目:如何添加其他包含和库目录?
- 在Visual Studio C++项目中包含源库的正确方法是什么?
- MS Visual Studio 解决方案结合了非托管C++项目和 C# 项目
- 智能感知不适用于Visual Studio 2017中的cmake项目
- 我可以在Visual Studio 2019上的项目下使用多个主函数吗?
- 如何在不需要LIBCD.lib的情况下在Visual Studio 6中编译C项目
- Visual Studio C++ 项目和引用项目的引用
- 为什么在Visual Studio的OpenCV项目中使用/MT时仍然需要dll?
- 如何在我的 Visual C++ 项目中使用 .a 文件
- 无法使用"generate_vcxproj.bat"生成 GDAL Visual Studio 项目
- Visual Studio 如何在内核模式驱动程序项目中使用C++标准库?
- Visual Studio 中静态库项目之间的未解析外部
- Qt - 为什么Visual Studio 2019在qml资源中添加10Mb文件后无法再编译我的项目?
- 在 Visual Studio 的同一项目中创建多个C++文件
- 如何手动将库添加到Visual Studio 2017项目?
- 在 Visual Studio 中的 1 个项目中编译单个 C++ 源文件
- 如何在 win32 中使用 ActiveX dll C++项目 Visual Studio 2010
- 如何将扩展链接到项目(Visual Studio c++)