【问题标题】:CMake creating a strange directory structureCMake创建一个奇怪的目录结构
【发布时间】:2012-01-16 01:37:08
【问题描述】:

我是 CMake 新手,对 CMake 创建的文件的组织方式有疑问。

首先我将详细介绍文件树。我正在尝试使用来自两个源目录(网格和示例)和一个构建目录的示例程序构建一个简单的库。所以,我有三个 CmakeLists.txt 文件。因此,顶层目录如下所示:CMakeLists.txt、/Grid、/examples 和 /build。

这个 CMakeLists.txt 包含:

project(talyfem)
cmake_minimum_required(VERSION 2.8.4)
set(CMAKE_CXX_FLAGS "-g")
add_subdirectory(examples Grid) 

在 Grid 文件夹内 CmakeLists.txt 是:

add_library(${PROJECT_NAME} FEMElm.cpp Grid.cpp GridField.cpp SuperGrid.cpp SuperGrid3D.cpp)

在示例文件夹中 CmakeLists.txt 是:

set(EXAMPLES example1)
foreach(example ${EXAMPLES})
   add_executable(${example} ${example}.cpp)
  target_link_libraries(${example} ${PROJECT_NAME})
endforeach(example)

我从构建目录运行 CMake:Cmake ../ 当我这样做时,它会创建一个奇怪的文件结构,我无法弄清楚并且看起来不正确。首先,它创建了一个 ../build/CMakeFiles 文件夹,这是我所期望的。但是,它会创建一个 ../build/Grid 文件夹,并且在该文件夹中是另一个 CMakeFiles 文件夹,该文件夹随后包含一个 example1.dir 文件夹。如果我切换子目录的顺序,首先是 Grid,然后是示例,则相反,Grid.dir 位于示例子目录中。

这似乎不正确,如果能帮助我解决此问题,我将不胜感激。

我希望 ../build/CMakeFiles 应该包含一个 Grid.dir 和一个 examples.dir 文件夹。

【问题讨论】:

  • 我有一份 Mastering CMake 的副本,所以如果答案在那里,我只需要一个页码。

标签: build cmake subdirectory


【解决方案1】:

错误在于您使用add_subdirectory 的方式。来自CMake Docs

add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

所以当你给add_subdirectory 两个参数时,第一个被解释为源目录,第二个被解释为应该构建这个源的目录。

你想要的是两次调用add_subdirectory

add_subdirectory(examples)
add_subdirectory(Grid)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    相关资源
    最近更新 更多