我有一个非常适合我在 Windows 和 Linux 上的项目的 cmake 配置。我们现在正在修改 MacOS,我们正处于 Xcode 吐出库的地步,这些库从我们定义的目录中构建了一个目录。例如,它不是放在 ~/bin 中,而是放在 ~/bin/Debug 中。尽我所能告诉 Xcode 正在自行将此文件夹添加到路径中,我不希望这样。
如何在我的 cmake 配置中禁用 Xcode 执行此操作?
您需要为每个配置类型和您想要影响的每个目标指定目标属性ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>
、LIBRARY_OUTPUT_DIRECTORY_<CONFIG>
和/或。RUNTIME_OUTPUT_DIRECTORY_<CONFIG>
要影响所有目标,您可以设置名为这些的变量,并带有CMAKE_
前缀。在这些设置之后添加的任何相关目标都将受到影响。
因此,例如,您可以这样做:
add_library(MyLib ${Sources})
set_target_properties(MyLib PROPERTIES
ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}
ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR})
或者你可以这样做:
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR})
add_library(MyLib ${Sources})
话虽如此,我通常发现最好让 XCode 和 MSVC 等多配置生成器只添加特定于配置的目录。除非您还打算更改 exe 和库的默认名称,否则这些多配置 IDE 将用另一个配置的输出覆盖一个配置的输出。因此,例如,很难判断您是在查看 Debug 还是 Release exe。
对于单配置生成器,我认为每个配置都有单独的构建树以保持区分是很常见的。
基本上,我不会与发电机抗争。CMake 自动化了如此多的构建过程,以至于我从来没有发现生成器之间的这种细微差别是一个问题。您很少需要考虑输出路径是否包含配置目录。