在整个项目中使用Cmake一次后,在子目录中使用Cmake存在问题

在整个项目中使用Cmake一次后,在子目录中使用Cmake存在问题,c,windows,cmake,C,Windows,Cmake,我有一个名为Tutorial的主文件夹和一个名为MathFunctions的子文件夹,每个文件夹都有一个代码 我为这两个文件夹都编写了CMakeLists.txt,并在cmd prompt中使用了cmake,它运行良好 head文件夹中的CMakeLists.txt包含以下内容: CMAKE_MINIMUM_REQUIRED ( VERSION 2.6) PROJECT (Tutorial) SET (Tutorial_VERSION_MAJOR 1) SET (Tutorial_VERSI

我有一个名为Tutorial的主文件夹和一个名为MathFunctions的子文件夹,每个文件夹都有一个代码 我为这两个文件夹都编写了CMakeLists.txt,并在cmd prompt中使用了cmake,它运行良好

head文件夹中的CMakeLists.txt包含以下内容:

CMAKE_MINIMUM_REQUIRED ( VERSION 2.6)

PROJECT (Tutorial)

SET (Tutorial_VERSION_MAJOR 1)
SET (Tutorial_VERSION_MINOR 0)

CONFIGURE_FILE (
"${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
"${PROJECT_BINARY_DIR}/TutorialConfig.h "
)

INCLUDE_DIRECTORIES ("${PROJECT_BINARY_DIR}")

OPTION (USE_MYMATH "Use tutorial provided math implementation" ON)

if (USE_MYMATH)
  INCLUDE_DIRECTORIES ("${PROJECT_SOURCE_DIR}/MathFunctions")

  ADD_SUBDIRECTORY (MathFunctions)
  SET (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif (USE_MYMATH)

ADD_EXECUTABLE (Tutorial tutorial.c)
TARGET_LINK_LIBRARIES (Tutorial ${EXTRA_LIBS})
CMAKE_MINIMUM_REQUIRED ( VERSION 2.6)
add_library (MathFunctions mysqrt.c )
子文件夹中的CMakeLists.txt包含以下内容:

CMAKE_MINIMUM_REQUIRED ( VERSION 2.6)

PROJECT (Tutorial)

SET (Tutorial_VERSION_MAJOR 1)
SET (Tutorial_VERSION_MINOR 0)

CONFIGURE_FILE (
"${PROJECT_SOURCE_DIR}/TutorialConfig.h.in"
"${PROJECT_BINARY_DIR}/TutorialConfig.h "
)

INCLUDE_DIRECTORIES ("${PROJECT_BINARY_DIR}")

OPTION (USE_MYMATH "Use tutorial provided math implementation" ON)

if (USE_MYMATH)
  INCLUDE_DIRECTORIES ("${PROJECT_SOURCE_DIR}/MathFunctions")

  ADD_SUBDIRECTORY (MathFunctions)
  SET (EXTRA_LIBS ${EXTRA_LIBS} MathFunctions)
endif (USE_MYMATH)

ADD_EXECUTABLE (Tutorial tutorial.c)
TARGET_LINK_LIBRARIES (Tutorial ${EXTRA_LIBS})
CMAKE_MINIMUM_REQUIRED ( VERSION 2.6)
add_library (MathFunctions mysqrt.c )
和在命令提示符中:

C:\home\Tutorial\BUILD>cmake ..

-- Building for: Visual Studio 9 2008

-- Check for working C compiler using: Visual Studio 9 2008

-- Check for working C compiler using: Visual Studio 9 2008 --

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Check for working CXX compiler using: Visual Studio 9 2008

-- Check for working CXX compiler using: Visual Studio 9 2008

-- Detecting CXX compiler ABI info

-- Detecting CXX compiler ABI info - done

-- Configuring done

-- Generating done

-- Build files have been written to: C:/home/Tutorial/BUILD
后来我在MathFunctions.c中做了一些修改,在Tutorial.c中没有做任何更改。所以我想重新生成make文件,仅用于MathFunctions文件夹。但是我做不到。我得到以下错误

C:\home\Tutorial\BUILD>cmake ../MathFunctions
CMake错误:源“C:/home/Tutorial/MathFunctions/CMakeLists.txt”与用于生成缓存的源“C:/home/Tutorial/CMakeLists.txt”不匹配。使用其他源目录重新运行cmake

我不明白为什么会出现这个错误。 请帮忙
谢谢

如果您对项目中已有的源文件进行了修改,则无需重新启动CMake。只需重新编译。

好的,我知道这很古老,但…有一个类似的问题,相同的错误消息

GUI上的文件下有一个清除缓存的命令。这在第一次不起作用,但最终起了作用。我反复思考了一下,将cmake添加到用户路径,重新启动,不知道这些是否有帮助

最初,我试图在一个不是根的CMakeLists.txt上运行cmake,结果遇到了麻烦。当我再次尝试使用正确的源目录时,出现了这个错误。V3.1.3.

只需删除

.externalNativeBuild


从项目中删除文件夹并再次同步。通过这样做,您将删除生成缓存。

如果再次运行CMake,请以“CMake”的形式运行它,或者使用与第一次运行它时完全相同的命令行运行它。CMake在运行时缓存主顶级源目录和主顶级生成目录的原始值。运行“cmake.”表示使用当前目录中CMakeCache.txt文件中的源目录和生成目录。在最初运行CMake时运行它也会使用缓存的信息。使用不同的源目录作为其主要参数运行它是一个错误,并且将产生您得到的错误消息。。。