CMake - 将DLL复制到运行时输出目录

时间:2018-05-02 14:28:41

标签: qt visual-c++ cmake

我正在尝试创建一个简单的CMake来检索Qt的DLL并将其复制到cmake创建可执行文件的目录中。

使用g ++或clang可以很好地工作,但MSVC(Visual Studio 2017)会创建 Debug Release 目录。

我找不到一种方法来检索写入可执行文件的真实目录的路径(${CMAKE_CURRENT_BINARY_DIR}返回 Release Debug )。

我见过有人使用目标属性RUNTIME_OUTPUT_DIRECTORY但是当我使用它时它是空的。

知道我怎么能这样做吗?我不想更改输出目录,我只想知道它的路径(所以我不想更改RUNTIME_OUTPUT_DIRECTORY的值)

谢谢!

1 个答案:

答案 0 :(得分:1)

在Visual Studio中,在配置步骤(处理CMakeLists.txt文件时)build type 未设置,因此没有构建-type - 依赖变量或属性可直接使用。相反,应该使用generator-expressions

例如,可以使用$<TARGET_FILE_DIR:tgt>生成器表达式提取可执行文件或库目标的输出目录。它将返回完整目录,其中包含&#34; Release /&#34;或&#34;调试/&#​​34;已经附加。

请注意,只有在文档中允许使用显式时,才能使用生成器表达式。例如,它们不能用于message()命令。

或者,您可以明确地设置变量CMAKE_RUNTIME_OUTPUT_DIRECTORY,因此对于每个构建类型,只需将适当的子目录附加到它。但是为了提取这个子目录,你应该再次使用生成器表达式:$<CONFIG>

从技术上讲,可以为任何构建类型设置相同的输出目录。但不建议这样做,因为来自一种构建类型的文件将被另一种构建类型的文件覆盖