【问题标题】:setting external library /bin folder in cmake in windows在 Windows 的 cmake 中设置外部库 /bin 文件夹
【发布时间】:2016-03-17 09:54:45
【问题描述】:

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

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

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

*要清楚,我成功做的是,使用cmake,我可以选择我想要的PCL版本的PCLConfig,但是在运行我的程序(成功编译)时,它会抛出一个丢失的pcl_**** .dll 丢失,这是逻辑,因为 PCL/bin 文件夹未添加到系统环境中。所以,我的问题是“我可以使用我项目的 CMakeLists 将 PCL/bin floder 添加到项目环境中吗?(而不是将其添加到系统环境中)”

提前致谢。

【问题讨论】:

  • The problem is that I want also to set its binaries /bin folders in the same cmake file - 你能详细说明你的问题吗?是否要导出 PATH 变量以及脚本 PCLConfig.cmake 中包含的 <local-install>/bin 目录?如果是这样,只需将set(ENV{PATH} "$ENV{PATH};<local-install>/bin") 添加到PCLConfig.cmake。这样,find_program() 等其他 CMake 命令也会搜索您的 /bin 目录。
  • 我编辑了我的问题。简而言之,有没有办法使用 cmake 设置/编辑系统环境变量?
  • 脚本只能为配置阶段设置环境变量。要使生成的可执行文件正常工作,需要正确调整 RPATH。 RPATH handling in CMAke 有很好的描述。

标签: cmake environment-variables point-cloud-library bin


【解决方案1】:

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

调试->环境

Tsyvarev,我正在寻找您的建议,如果可行,我会通知您。看起来更干净的方式... 干杯,

【讨论】:

    【解决方案2】:

    用于调试的 PATH 信息存储在“用户”项目文件中。我编写了一个 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 外部运行它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-03
      • 2015-08-25
      • 1970-01-01
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      相关资源
      最近更新 更多