CLion:Cmake配置类型问题

时间:2016-04-27 09:36:12

标签: cmake clion

据我所知,默认情况下,Clion会在所有四种配置中为Clion中加载的项目创建二进制文件:

(Debug;Release;MinSizeRel;RelWithDebInfo)

以及名为__default__的人。

我正在使用第三方cmake module,它以add_subdirectory()可以在其上运行的方式下载外部项目,因此它将包含在根项目中。

add_subdirectory(${downloaded_proj_src_dir} ${downloaded_proj_bin_dir} EXCLUDE_FROM_ALL)

在此设置中,如果我决定将子项目放在根项目的二进制目录之外,我会得到:

  

错误:不支持CMake构建目录之外的二进制目录。很可能这个错误是由带有显式指定的binary_dir参数的add_subdirectory命令引起的。

这是CMake可以理解的限制。

现在,如果我决定将下载项目的二进制目录设置在父项目的二进制目录的子目录中,即:

set(downloaded_proj_bin_dir "${CMAKE_BINARY_DIR}/${downloaded_proj}-build")
...
add_subdirectory(${downloaded_proj_src_dir} ${downloaded_proj_bin_dir} EXCLUDE_FROM_ALL)

我将获取在所有构建配置的父二进制目录中创建的文件,因为${CMAKE_BINARY_DIR}对于每个配置都不同。为避免看到项目视图侧栏上列出的所有这些目录,我将CMAKE_CONFIGURATION_TYPES设置为Debug。但就在那时,我得到了:

  

错误:配置调试   当前的CMakeCache.txt目录/path/Debug/downloaded_proj_bin/CMakeCache.txt与创建CMakeCache.txt的目录/path/__default__/downloaded_proj_bin/CMakeCache.txt不同。这可能导致在错误的位置创建二进制文件。如果您不确定,请重新编辑CMakeCache.txt

很明显,这个__default__配置正在发生一些我不明白的事情。所以问题是,这个default配置有什么意义,为什么会发生冲突?

P.S。将配置设置为__default__并不能解决问题,因为我将创建__default__0配置并获得相同的错误。

更新:进一步的观察

  1. 我在IDE中设置的环境变量对cmake版本没有任何影响。
  2. Cmake"选项"然而,这可能会作为参数传递到cmake似乎确实有效。 -D CMAKE_CONFIGURATION_TYPES =调试。
  3. 当我指定命令行选项时,我得到
  4.   

    警告:项目未使用手动指定的变量:     CMAKE_CONFIGURATION_TYPES

    但它显然确实具有不再创建其他构建配置的效果。我的猜测是这条消息与忽略参数的__default__构建有关。

    1. 即使在IDE中指定CMAKE_CONFIGURATION_TYPES,我仍然会获得额外的__default__版本,该版本显然不受CMAKE_CONFIGURATION_TYPES分配的影响。
    2. 记录:message("Build type: ${CMAKE_BUILD_TYPE} )不返回任何build_type。
    3. 输出message(and generator: ${CMAKE_GENERATOR} ")返回" Unix-make文件"对于两者,所以两者都是用相同的生成器生成的。
    4. 从CMakeCache.txt文件中获取差异,我可以看到它们是相同的。

2 个答案:

答案 0 :(得分:0)

你在DownloadProject.cmake中有正确的设置吗?为:

  

设置(_DownloadProjectDir" $ {CMAKE_CURRENT_LIST_DIR}")

尝试设置谷歌测试时遇到了同样的问题(在https://github.com/Crascit/DownloadProject的帮助下),我的_DownloadProjectDir被设置为" test"。也许当我在我的项目中移动这个cmake文件时,Clion会自动更改它。

答案 1 :(得分:0)

所以,事实证明你可以通过在DownloadProject.cmake中的第145行上面添加以下行来轻松解决这个问题:

file(REMOVE "${DL_ARGS_DOWNLOAD_DIR}/CMakeCache.txt")

这似乎是因为CLion将默认值复制到其他配置并且不清除缓存。这是一个问题,因为DownloadProject在项目中创建了一个项目(我认为......)。无论如何,在配置CMakeLists.txt之前删除此文件会绕过此问题。我将向DownloadProject存储库提交一个pull请求,因为这在不使用CLion时似乎没有任何不利影响。