在 windows 中的 cmake 中设置外部库/bin 文件夹

setting external library /bin folder in cmake in windows

我的问题与 PCL 安装有关,这里是:

我使用 MSVC2013 编译了 PCL 并手动更新了我的 PCLConfig.cmake 以指向它的所有依赖项(3rdParty 库)。问题是我还想在同一个 cmake 文件中设置它的二进制文件 /bin 文件夹(而不是将 /bin 添加到环境变量)。有办法吗?

使这个问题相关的是我正在测试 PCL 的不同版本(1.6、1.7、1.8...),因此不会将 /bin 文件夹添加到所有这些版本的路径中之后(在检索步骤中)会在它们之间产生某种冲突吗?

*要清楚,我成功地做的是,使用 cmake,我可以选择我想要的 PCL 版本的 PCLConfig,但是当 运行 我的程序(成功编译),它抛出一个 missing pcl_****.dll missing,这是逻辑,因为 PCL/bin 文件夹没有添加到系统环境中。所以,我的问题是 "can I add the PCL/bin floder to the project environment using the CMakeLists of my project? (instead of adding it to system environment)"

提前致谢。

我发现的一个临时修复方法是使用指定的 PCL 版本生成我的项目,然后在 MSVC 2013 中手动添加 bin 文件夹:

调试->环境<< PATH=path_to_lib\lib;%PATH%

Tsyvarev,我正在寻找你的建议,如果可行,我会通知你。看起来像一个更清洁的方式...... 干杯,

用于调试的 PATH 信息存储在 "user" 项目文件中。我已经编写了一个 CMake 函数来自动生成这样的文件。这适用于 VC10。我认为它仍然可以工作,或者可能需要一些修改。主要是保留一个空的用户项目文件作为模板,CONFIGURE_FILE 内容随意设置。我已经设置好我的设置,以便您首先执行:SET(USERFILE_ENVIRONMENT "PATH=${directory}") 然后使用 CMake 项目的名称调用宏 CREATE_USER_FILE

CreateUserFile.cmake:

get_filename_component(MY_DIRECTORY ${CMAKE_CURRENT_LIST_FILE} PATH)
SET(USERFILE_TEMPLATE ${MY_DIRECTORY}/msdev.vcxprojuser.template CACHE STRING "" FORCE)

MACRO(CREATE_USER_FILE _projectName)

# Find user and system name
SET(SYSTEM_NAME $ENV{USERDOMAIN} CACHE STRING SystemName)
SET(USER_NAME $ENV{USERNAME} CACHE STRING UserName)

IF (${CMAKE_SIZEOF_VOID_P} MATCHES 4)
    SET(USERFILE_ARCH Win32)
ELSE()
    SET(USERFILE_ARCH x64)
ENDIF()

SET(USER_FILE ${_projectName}.vcxproj.user)
SET(USERFILE_TEMPLATE ${USERFILE_TEMPLATE})

SET(OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/${USER_FILE})
# Configure the template file
CONFIGURE_FILE(${USERFILE_TEMPLATE} ${USER_FILE} @ONLY)

ENDMACRO(CREATE_USER_FILE)

这是模板文件。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|@USERFILE_ARCH@'">
    <LocalDebuggerEnvironment>@USERFILE_ENVIRONMENT@</LocalDebuggerEnvironment>
    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|@USERFILE_ARCH@'">
    <LocalDebuggerEnvironment>@USERFILE_ENVIRONMENT@</LocalDebuggerEnvironment>
    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MinSizeRel|@USERFILE_ARCH@'">
    <LocalDebuggerEnvironment>@USERFILE_ENVIRONMENT@</LocalDebuggerEnvironment>
    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='RelWithDebInfo|@USERFILE_ARCH@'">
    <LocalDebuggerEnvironment>@USERFILE_ENVIRONMENT@</LocalDebuggerEnvironment>
    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
  </PropertyGroup>
</Project>

提示:在设置 CMake 计算的 PATH 后,执行类似生成 .bat 文件以启动程序的操作,因此您可以从外部 运行 它 Visual Studio。