如何禁止Xcode生成以cmake中的构建配置命名的文件夹?

Mak*_*rgy 4 xcode cmake

我有一个cmake配置,适用于Windows和Linux上的项目.我们现在正在修改MacOS,我们正处于Xcode吐出库的地方,这些库构建了一个与我们定义的目录不同的目录.例如,它放在〜/ bin/Debug中,而不是放在〜/ bin中.最好的我可以告诉Xcode正在将自己的文件夹添加到路径中,我不希望这样.

如何在我的cmake配置中禁用Xcode?

Fra*_*ser 7

您需要为每个配置类型和要影响的每个目标指定目标属性ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>,LIBRARY_OUTPUT_DIRECTORY_<CONFIG>和/或目标属性RUNTIME_OUTPUT_DIRECTORY_<CONFIG>.

要影响所有目标,可以使用CMAKE_prepended 设置名为这些的变量.在设置这些目标后添加的任何相关目标都将受到影响.

所以,例如你可以这样做:

add_library(MyLib ${Sources})
set_target_properties(MyLib PROPERTIES
                      ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}
                      ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)

或者你可以这样做:

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR})
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR})
add_library(MyLib ${Sources})
Run Code Online (Sandbox Code Playgroud)

话虽如此,我通常发现最好让像XCode和MSVC这样的多配置生成器添加特定于配置的目​​录.除非你打算同时更改exes和libs的默认名称,否则这些多配置IDE将用另一个配置覆盖一个配置的输出.因此,很难判断您是否正在查看Debug或Release exe.

对于单配置生成器,我认为每个配置都有单独的构建树以保持区别清晰.

基本上,我不会反对发电机.CMake自动化了很多构建过程,我从来没有发现生成器之间的这种细微差别是一个问题.您很少需要考虑输出路径是否包含配置目录.

  • 您可以使用[`add_custom_command(TARGET MyTarget PRE_LINK COMMAND ...)`](http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:add_custom_command).在`COMMAND`部分,您可以使用生成器表达式`$ <TARGET_FILE:MyTarget>`来引用构建的lib/exe的完整路径,无论它是否包含"Debug"/"Release". (2认同)