Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake将生成文件放入源目录_Cmake - Fatal编程技术网

CMake将生成文件放入源目录

CMake将生成文件放入源目录,cmake,Cmake,我对CMake很陌生。一位朋友为我自己编写的项目写了一个简单的CMakeLists.txt。我正在使用svn,刚刚将同一台机器上的旧版本签出到另一个文件夹中。现在,在原始源目录(CMakeLists.txt所在的位置)中,我创建了目录“build”,并将cd放入其中,暂时运行代码 cmake -DCMAKE_BUILD_TYPE=Debug .. 这很好地将所有文件放在build目录中 -- Build files have been written to: ~/MixedFEMultigri

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

cmake -DCMAKE_BUILD_TYPE=Debug ..
这很好地将所有文件放在build目录中

-- Build files have been written to: ~/MixedFEMultigrid/build
cd ~
mkdir MixedFEMultigrid
cd MixedFEMultigrid
svn co <repository>
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
现在,当我签出到另一个目录时,在该目录中创建另一个“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")
根据Escraford的评论,我正在更新以显示我在命令行上的操作

cd ~
mkdir oldCode
cd oldCode
svn co <repository>
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
cd~
mkdir旧代码
cd旧码
svn公司
mkdir构建
光盘制作
cmake-DCMAKE\u BUILD\u TYPE=Debug。。
然后将生成文件放入目录“oldCode”而不是“build”目录。另一方面,下面的代码将生成文件放入“build”目录中

-- Build files have been written to: ~/MixedFEMultigrid/build
cd ~
mkdir MixedFEMultigrid
cd MixedFEMultigrid
svn co <repository>
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
cd~
mkdir混合多重网格
cd混合多重网格
svn公司
mkdir构建
光盘制作
cmake-DCMAKE\u BUILD\u TYPE=Debug。。

来自源代码内cmake执行的

请记住删除cmake缓存:

$ rm CMakeCache.txt
$ mkdir debug
$ cd debug
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
这还有另一个好处,因为cmake不能提供一个干净的目标

$ cd ..
$ rm -rf debug

是否等效于
make clean
或更准确地说是
make distclean

在运行cmake之前,您是否已将cd刻录到新项目中的生成目录?告诉我们你在命令行上输入的内容。是的,我输入了。否则它就不会找到CMakeLists.txt文件。我已经更新了帖子,加入了我运行的shell命令,我使用了你的CMakeLists.txt(修改为只有一个源文件以便于复制),以及dir a mkdir build;光盘制作;cmake-DCMAKE\u BUILD\u TYPE=Debug..-它按预期工作,将生成文件置于“生成”下。也许svn里有什么额外的东西?你的问题中列出的每件事都应该按照你期望的方式进行。谢谢你试过这个。我已经有了更多的发挥,并发现了什么是错误的。我无意中从源目录运行了cmake,该目录创建了一个CMAKECHACHE.txt文件,源目录作为构建目录。当我创建一个构建目录时,它仍然被读取,所以构建文件仍然被放在源目录中。你的评论非常有用,谢谢你让我抓狂,就是这样,如果有一个旧的cmakecache可以覆盖你想要它做的事情。