CMake如何在Windows上获取二进制目标的完整目录和名称

nnsrf1az  于 2022-11-11  发布在  Windows
关注(0)|答案(2)|浏览(341)

在CMake中有没有一种方法可以通过检查目标属性来找到二进制目标的完整名称(mybin.exe)?
get_target_property(EXENAME targetname OUTPUT_NAME)(或运行时间输出名称)
或者,我必须使用自定义命令,如How to get library full-native name on cmake?中的命令
使用get_target_property,我似乎只能从它得到“逻辑”的目标名称(mybin),而没有其他信息。
谢谢你

ev7lccsx

ev7lccsx1#

如果没有生成器表达式,这是不可能的,这是有原因的:有多个配置生成器,如Visual Studio生成器,它们在一次CMake配置运行(cmake -S ... -B ...)中为多个构建配置(发布、调试...)创建一个构建系统。甚至默认情况下,在名称与构建的配置匹配的目录中创建二进制文件。
根据您要对信息执行的操作,有以下几种替代方法:

  • 您可以使用生成器表达式,例如,如果您需要将信息作为add_custom_commandadd_custom_targetadd_test或类似内容的一部分。多个目标属性也允许使用生成器表达式。
  • 您可以在安装步骤中建立所需的目录结构,请参阅the install() command
  • 您可以让建置系统在特定位置产生档案,例如在顶层CMakeLists.txt中设定the CMAKE_RUNTIME_OUTPUT_DIRECTORY variable。请注意,除非变数值包含产生器运算式,否则这仍会导致为多组态产生器建立组态相依子目录。(您可以简单地添加$<0:>,但这很容易导致不同配置的二进制文件相互覆盖。)

如果你不能在顶层CMakeLists.txt中通过命令行或cmake presets来指定它,你仍然可以使用一个相对于CMAKE_BINARY_DIR的路径;这将使二进制文件易于定位。

3pvhb19x

3pvhb19x2#

最后那是一个做的问题:

add_custom_command(TARGET ${your_target}
    POST_BUILD
    WORKING_DIRECTORY ${your_dir}
    COMMAND echo "$<TARGET_FILE:${your_target}>" > "exename.txt"
    DEPENDS ${your_target} ${another_target}
    VERBATIM
    )

因此exename.txt包含可执行文件目标的完整路径没有找到类似以下操作的方法:

set(EXENAME "$<TARGET_FILE:${your_target}>")

不管怎样...

相关问题