我正在尝试创建一个简单的CMake来检索Qt的DLL并将其复制到cmake创建可执行文件的目录中。
使用g ++或clang可以很好地工作,但MSVC(Visual Studio 2017)会创建 Debug 或 Release 目录。
我找不到一种方法来检索写入可执行文件的真实目录的路径(${CMAKE_CURRENT_BINARY_DIR}
返回 Release 或 Debug )。
我见过有人使用目标属性RUNTIME_OUTPUT_DIRECTORY
但是当我使用它时它是空的。
知道我怎么能这样做吗?我不想更改输出目录,我只想知道它的路径(所以我不想更改RUNTIME_OUTPUT_DIRECTORY
的值)
谢谢!
答案 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>
。
从技术上讲,可以为任何构建类型设置相同的输出目录。但不建议这样做,因为来自一种构建类型的文件将被另一种构建类型的文件覆盖。