在父目录中运行Cmake和make

时间:2015-12-09 22:04:50

标签: bash shell cmake makefile

我有一个位于父目录a的项目。该脚本在3个不同的子目录中运行可执行文件。示例如下:

      A
    / | \
   B  C  D

现在,我想使用来自A的scrpit在B,C和D中编译cpp文件。

到目前为止,在我的脚本中,我删除了所有旧的CMakeCache.txt和Makefile文件以及CMakeFiles目录,以确保没有重叠。

我运行cmake B/后跟make -C B/。我为每个子目录执行此操作。但我收到错误CMake Error: The source "/home/ybouvron/Documents/A/B/CMakeLists.txt" does not match the source "/home/ybouvron/Documents/A/C/CMakeLists.txt" used to generate cache. Re-run cmake with a different source directory.

为什么我得到这个以及如何修复它?似乎它试图将两个编译为同一个项目,但在子目录中的每个CMakeLists.txt文件中,它们具有不同的项目名称和可执行文件名称。

提前致谢。

#! /bin/bash

echo Deleting old make files

rm B/CMakeCache.txt
rm -r B/CMakeFiles/
rm B/Makefile

rm C/CMakeCache.txt
rm -r C/CMakeFiles/
rm C/Makefile

rm D/CMakeCache.txt
rm -r D/CMakeFiles/
rm D/Makefile

set -e

echo Compiling subsystems...
cmake B
make -C B

cmake C/
make -C C/ 

cmake D/
make -C D/

1 个答案:

答案 0 :(得分:0)

Dim PvtTbl As PivotTable Dim PvtFld As PivotField Dim MatchFound As Boolean, i As Long ' set the Pivot Table Set PvtTbl = ActiveSheet.PivotTables("PivotTable1") ' set the Pivot Field Set PvtFld = PvtTbl.PivotFields("GP#") MatchFound = False ' reset flag For i = 1 To PvtFld.PivotItems.Count ' loop through all pivot items If PvtFld.PivotItems(i).Name = vGP(1) Then ' check if the second array element is found in one of the Pivot items MatchFound = True ' raisw flag Exit For End If Next i If MatchFound Then PvtFld.PivotItems(i).Visible = True ' apply filter if the array element found End If 将子目录cmake B中的项目配置为当前目录B构建项目,该项目应配置为子目录B 。对于项目B的源代码构建,您需要make -C B,因此cd B && cmake .将构建该项目。                      - Tsyvarev