【问题标题】:CMake putting build files in source directoryCMake将构建文件放在源目录中
【发布时间】:2014-07-27 00:58:54
【问题描述】:

我对 CMake 很陌生。一个朋友为我自己编码的项目写了一个简单的 CMakeLists.txt。我正在使用 svn,并且刚刚将同一台机器上的旧版本检出到不同的文件夹中。现在,在原始源目录(CMakeLists.txt 所在的位置)中,我创建目录“build”,cd 到那里,暂时运行代码

cmake -DCMAKE_BUILD_TYPE=Debug ..

这很好地将所有文件放在构建目录中

-- Build files have been written to: ~/MixedFEMultigrid/build

现在,当我签出另一个目录时,在该目录中创建另一个“构建”目录,然后运行 ​​CMake 命令,我得到以下内容

-- Build files have been written to: ~/oldCode

其中 oldCode 实际上是父目录。我不知道为什么会这样。谁可以给我解释一下这个?完整的 CMakeLists.txt 文件如下所示,

cmake_minimum_required (VERSION 2.6)
project (MixedFEMultigrid)
FIND_PACKAGE(LAPACK REQUIRED)
set( SRC_FILES  multigrid.c 
  gridHandling.c
  interpolation.c
  linApprox.c
  params.c
  sparseMatrix.c
  testing.c
  richardsFunctions.c
  definitions.c
  newtonIteration.c
  )

#Adds the executable with all the dependencies
add_executable (multigrid ${SRC_FILES})

#Specifies the libraries to link to the target
TARGET_LINK_LIBRARIES(multigrid ${LAPACK_LIBRARIES} m)

# Update if necessary
set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic -fstrict-aliasing -std=c99 -O3")

根据 escrafford 的评论,我正在更新以显示我在命令行上所做的事情。

cd ~
mkdir oldCode
cd oldCode
svn co <repository>
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..

然后将构建文件放入目录“oldCode”而不是“构建”目录。另一方面,以下将构建文件放入“构建”目录

cd ~
mkdir MixedFEMultigrid
cd MixedFEMultigrid
svn co <repository>
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..

【问题讨论】:

  • 在运行 cmake 之前,您是否 cd 到了新项目中的 build 目录?向我们准确显示您在命令行中输入的内容。
  • 是的,我做到了。否则它不会找到 CMakeLists.txt 文件。我更新了帖子以包含我运行的 shell 命令
  • 我使用了你的 CMakeLists.txt(修改为只有一个源文件以便于重现),并 dir a mkdir build;cd build; cmake -DCMAKE_BUILD_TYPE=Debug .. - 它按预期工作,将构建文件置于构建之下。也许一些额外的东西被签入svn?您的问题中列出的所有内容都应该按照您的预期行事。
  • 好的。感谢您尝试过这个。我玩了更多的游戏,并发现出了什么问题。我无意中从源目录运行 cmake,该目录创建了一个 CMakeCache.txt 文件,其中源目录作为构建目录。当我创建一个构建目录时,它仍在被读取,所以构建文件仍然被放入源目录。您的 cmets 非常有用,谢谢
  • 让我发疯,就是这样,如果有一个旧的 cmakecache 会覆盖你想要它做的事情。

标签: cmake


【解决方案1】:

这来自源内 cmake 执行

记得删除cmake缓存:

$ rm CMakeCache.txt
$ mkdir debug
$ cd debug
$ cmake -DCMAKE_BUILD_TYPE=Debug ..

这还有另一个好处,因为 cmake 不提供干净的目标

$ cd ..
$ rm -rf debug

相当于make clean或更准确地说是make distclean

【讨论】:

    猜你喜欢
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多