我有一个像这样组织的项目:
<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
PARENT_SCOPE
,然后添加exe1/MakeLists.txt
并写入set(EXE1_SOURCES ${EXE1_SOURCES} PARENT_SCOPE)
但都失败了。
实现我想做的最简单的方法是什么?
答案 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);
。