1

我使用 cmake 和 cpack 为我的软件制作了安装程序。在 cpack 安装程序中,用户选择安装软件的位置。比方说C:\Users\MySoftware

我的所有文件.exe和一个python文件都使用cmake. 使用cpack,它添加C:\Users\MySoftware到我的环境变量中。然后我所有的 .exe 都可以从窗口使用cmd

我有一个它以某种顺序.bat运行多个选项等......在它的中间,它运行一个python脚本。.exe

python C:\HardPATH/mypython.py -i %var1% -m %var2% -t %var3% -o %var4% -I %var5% . 

我在使用 cmake 或 cpack 时尝试修改 C:\HardPath

我的问题是,根据用户选择安装软件的位置,我找不到使用cmakeor编辑“HardPATH”的方法。cpack并且因为它是 a.py而不是.exe,即使它位于添加到 env 路径的文件夹中,它也不起作用。我尝试使用configure_file,但它很快就会在配置步骤中执行,因此在用户使用 cpack 安装程序选择“HardPATH”之前。也许可以使用一些东西add_custom_command?但我不知道如何使用此命令更改 .bat 中的硬路径,或者如果可能的话。

知道如何解决这个“HardPATH”问题吗?

  IF(CMAKE_SYSTEM_NAME STREQUAL Windows)
    IF(Pack)
     INSTALL(TARGETS 
            exe1
            exe2
            etc
            DESTINATION bin)

     find_program(PYTHON "python")

    if (PYTHON)
     INSTALL(FILES mypython.py DESTINATION bin)
    endif()

   ELSE(Pack)
    INSTALL(TARGETS 
            exe1
            exe2
            etc
            DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)

    find_program(PYTHON "python")
    if (PYTHON)
      INSTALL(FILES mypython.py DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
    endif()
  ENDIF(Pack)

  ENDIF(CMAKE_SYSTEM_NAME STREQUAL Windows)

并在 env 变量中添加路径,在调用这个的主 cmakelist 中,我有:

set(CPACK_PACKAGE_NAME "CPackExampleInstaller")
SET(CPACK_NSIS_MODIFY_PATH ON)
INCLUDE(CPack)

如果我输入echo %PATH% 我会看到我选择在哪里安装我的软件。

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9. 0\libnvvp;C:\Python36\Scripts\;C:\Python36\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1。 0\;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\CMake\bin;C:\Program Files\Git\cmd;C:\Program Files\Git \m ingw64\bin;C:\Program Files\Git\usr\bin; C:\Users\xxx\Desktop\testCode\bin ;;C:\Users\xxxx\AppData\Local\GitHubDesktop\bin;D:\xxxx\Docker 工具箱

我可以在C:\Users\xxx\Desktop\testCode\bin中调用 .exe,而无需输入完整路径。但不是蟒蛇

4

1 回答 1

1

使用configure_file.

.bat您的源代码树仅包含最终文件的模板,而不是带有硬编码路径的最终文件:

rem File: foo.bat.in
python @MY_PATH@/mypython.py -i %var1% -m %var2% -t %var3% -o %var4% -I %var5% . 

然后使用 CMake 将真正的批处理文件生成到二叉树中:

set(MY_PATH ${CMAKE_INSTALL_PREFIX}/python)
configure_file(${PROJECT_SOURCE_DIR}/foo.bat.in ${PROJECT_BINARY_DIR}/foo.bat @ONLY)

然后.bat从二叉树安装文件。

请注意,这仍然是一个坏主意。约定是安装树中的文件是可重定位的,因此在安装工件的任何位置硬编码绝对路径并不是一件好事,而且可能会让您的用户感到不安。最好更改您的脚本,以便它们仅适用于相对路径。

于 2018-02-08T16:26:53.733 回答