【发布时间】: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