如何运行所有子目录CMakeList文件并捕获输出?

时间:2016-03-22 19:05:36

标签: c++ ubuntu cmake

我是cmake文件创建的新手。我在目录列表中有c ++代码,每个目录都有自己的CMakeLists.txt文件。为了在每个目录中编译和创建可执行文件,我必须进入内部目录并在终端上执行以下两个命令。

$ cmake .
$ make

示例目录结构: enter image description here

每个目录1,2 ... 41都有自己的`CMakeLists.txt'。

每个目录文件结构中的示例: enter image description here

为了在每个目录中编译和创建可执行文件,我必须遵循这些tow命令。

但是现在我必须编写python脚本/ cmake脚本来在每个目录中执行此操作并捕获输出并存储在日志文件中。

请有人指导我解决我的问题。提前谢谢。

我的每个目录CMakeLists.txt都是这样的:

project(foundations)
cmake_minimum_required(VERSION 2.6)

include_directories($ENV{GMOCK_HOME}/include $ENV{GMOCK_HOME}/gtest/include)
link_directories($ENV{GMOCK_HOME}/mybuild $ENV{GMOCK_HOME}/gtest/mybuild)
add_definitions(-std=c++11)

set(sources main.cpp RetweetCollectionTest.cpp)
add_executable(test ${sources})
target_link_libraries(test pthread)
target_link_libraries(test gmock)
target_link_libraries(test gtest)

1 个答案:

答案 0 :(得分:3)

add_subdirectory https://cmake.org/cmake/help/v3.0/command/add_subdirectory.html正是您所需要的。

编辑:

例如:

add_subdirectory(1 1)

第一个参数是source dir,第二个参数是二进制dir。因此,名称不应重叠。

另外,请检查:https://stackoverflow.com/a/7788165/934691

但是,如果您不想重写CMakeLists,可以使用简单的bash脚本,例如

for dir in ls ; do cd $dir; cmake . && make; cd ..; done

会更适合你。