CMake获取父目录中的源文件列表

时间:2018-06-04 10:32:36

标签: file cmake

我有一个像这样组织的项目:

<path_to_project>
  |_ build
  |_ exe1
  | |_ src
  | |_ includes
  |_ exe2
  | |_ src
  | |_ includes
  |_ libs
    |_ src
    |_ includes

我想用CMake管理它的所有不同编译部分(我是新手)。

为此,我在根目录创建了CMakeLists.txt,其中添加了以下行:
add_executable(exe1 ${EXE1_SOURCES})

EXE1_SOURCES目录的CMakeLists.txt中定义了exe1/src,其中包含所有exe1个源文件。

当我进入build目录并且我cmake ..时,它会显示add_executable called with incorrect number of arguments,这意味着它无法找到EXE1_SOURCES变量。

我尝试了两件事:

  • 在设置命令
  • 的末尾添加CACHE INTERNAL
  • 在set命令的末尾添加PARENT_SCOPE,然后添加exe1/MakeLists.txt并写入set(EXE1_SOURCES ${EXE1_SOURCES} PARENT_SCOPE)

但都失败了。

实现我想做的最简单的方法是什么?

1 个答案:

答案 0 :(得分:1)

为了在子目录add_subdirectory(${PROJECT_SOURCE_DIR}/exe1/src)中定义所有变量,我必须在主CMakeLists.txt中添加List<FlatItem> flatItems = ...; var navigationItems = flatItems.Select( i => new NavigationItem { ID = i.ID, Title = i.Title, ParentID = i.ParentID } ).ToList(); foreach (var i in navigationItems) i.Children = navigationItems.Where(n => n.ParentID == i.ID).ToList(); // get Google, Microsoft, Oracle items var rootNavigationItems = navigationItems.Where(n => n.ParentID == 0);