Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何仅链接到柯南软件包中的一些库? 我考虑开始使用包管理器来管理我的C++项目的第三方依赖关系,但我无法找到如何仅链接到柯南包中的一些库。我使用的是编译系统,我使用的是Conan多配置CMake生成器:_C++_Visual C++_Cmake_Package Managers_Conan - Fatal编程技术网

如何仅链接到柯南软件包中的一些库? 我考虑开始使用包管理器来管理我的C++项目的第三方依赖关系,但我无法找到如何仅链接到柯南包中的一些库。我使用的是编译系统,我使用的是Conan多配置CMake生成器:

如何仅链接到柯南软件包中的一些库? 我考虑开始使用包管理器来管理我的C++项目的第三方依赖关系,但我无法找到如何仅链接到柯南包中的一些库。我使用的是编译系统,我使用的是Conan多配置CMake生成器:,c++,visual-c++,cmake,package-managers,conan,C++,Visual C++,Cmake,Package Managers,Conan,按照文档中的示例,我有以下代码: project(FoundationTimer) cmake_minimum_required(VERSION 2.8.12) set(TARGET_NAME timer) include(${CMAKE_BINARY_DIR}/conanbuildinfo_multi.cmake) conan_basic_setup(TARGETS) add_executable(${TARGET_NAME} timer.cpp) target_link_librari

按照文档中的示例,我有以下代码:

project(FoundationTimer)
cmake_minimum_required(VERSION 2.8.12)

set(TARGET_NAME timer)

include(${CMAKE_BINARY_DIR}/conanbuildinfo_multi.cmake)
conan_basic_setup(TARGETS)

add_executable(${TARGET_NAME} timer.cpp)
target_link_libraries(${TARGET_NAME} CONAN_PKG::Poco)
在my
CMakeLists.txt

使用CMake生成解决方案后

conan install -g cmake_multi -s build_type=Debug -s compiler.runtime=MDd ..\mytimer\
conan install -g cmake_multi -s build_type=Release -s compiler.runtime=MD ..\mytimer\
cmake ..\mytimer\ -G "Visual Studio 14 2015 Win64"
这将生成对Conan包中所有库的依赖关系,以及对PocoConan包依赖的其他Conan包中所有库的依赖关系,如OpenSSLzlib

Visual Studio项目选项中调试配置的其他依赖项设置为:

C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoUtilmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoMongoDBmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoNetmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoNetSSLWinmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoCryptomdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoDatamdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoDataSQLitemdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoZipmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoXMLmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoJSONmdd.lib
C:\Users\ivan.bobev\.conan\data\Poco\1.7.8p3\pocoproject\stable\package\67348df82fcd362bbf088991f95bb229be582635\lib\PocoFoundationmdd.lib
C:\Users\ivan.bobev\.conan\data\OpenSSL\1.0.2l\conan\stable\package\b17b520b4b55729a7391c6b2d20631fec4cf1564\lib\ssleay32.lib
C:\Users\ivan.bobev\.conan\data\OpenSSL\1.0.2l\conan\stable\package\b17b520b4b55729a7391c6b2d20631fec4cf1564\lib\libeay32.lib
C:\Users\ivan.bobev\.conan\data\zlib\1.2.11\conan\stable\package\c32596dcd26b8c708dc3d19cb73738d2b48f12a8\lib\zlibd.lib
是否可以只链接到Poco包中的特定库

我尝试通过以下方式明确列出要链接到的库:

target_link_libraries(${TARGET_NAME}
  debug PocoFoundationmdd optimized PocoFoundationmd
  debug PocoUtilmdd optimized PocoUtilmd)
但是在此之后,lib文件的路径设置不正确,也不包括Poco包的目录


我正在使用最新的Conan版本0.25.1

我认为在调用设置步骤之前,最好过滤或定义必要的库。比如:

include(${CMAKE_BINARY_DIR}/conanbuildinfo_multi.cmake)
# Just the libraries you want
set(CONAN_LIBS_POCO PocoUtilmd PocoMongoDBmd PocoFoundationmd ws2_32 Iphlpapi.lib)
conan_basic_setup(TARGETS)
请注意,还有一些其他系统库,库名称在不同的操作系统和不同的配置中可能会有所不同。因此,可能最好过滤掉(类似于此,未经测试):

请注意,生成的
conanbuildinfo.cmake
文件的
include()
是“被动的”,除了声明CONAN\u XXX变量之外,它不应该做任何事情。因此,在实际设置构建之前,您可以按照自己的意愿操作它们,
conan\u basic\u setup()
就是这样做的,它将这些变量转换为cmake


在任何情况下,除非您有链接性能问题,否则将所有Poco LIB保留在那里都可以,除非它们对于最终可执行文件来说确实是必需的,否则它们不会被链接。

一个问题:您是否有链接器性能问题?我想你知道链接器不会使用不必要的库,所以除非你的链接步骤变得非常慢,你需要真正优化它,否则你最好离开默认库。这个解决方案仍然适用于Conan 1.27.1吗?我正在使用一个wt/4.3.1包,它包含几个库,其中一些库相互冲突,即:
wthttp
wttest
。我想从
${CONAN_LIBS}
中排除
wttest
。我怎样才能做到这一点?柯南配方已经在最新的柯南1.26(cmake_find_package generator)和柯南1.27(cmake_find_package_multi generator)中学习过。ConanCenter配方采用它们可能需要几周的时间,但一旦采用,就可以直接链接到像
Poco::crypto
这样的目标。用户是否可以通过ConanCenter中使用但不拥有的软件包来加速组件的采用?也就是说,有可能在某个地方开一家公关公司吗?(对不起,对于柯南/JFrog/etc来说是新手,所以只是测试一下希望加快速度)是的,回购协议仍然在EAP中,但是任何应用程序的用户都可以对任何现有的包进行贡献,提交新版本或全新的包。ConanCenter中的所有包都是从该回购自动创建的。
include(${CMAKE_BINARY_DIR}/conanbuildinfo_multi.cmake)
set(_my_poco_libs)
foreach(_library IN ${CONAN_LIBS_POCO})
   if(NOT ${_library} MATCHES "yourRegexToDiscardUnwantedLibs")
       list(APPEND _my_poco_libs ${_library})
   endif()
enforeach()
set(CONAN_LIBS_POCO ${_my_poco_libs})
conan_basic_setup(TARGETS)