SetDirectory["C:\\drorbn\\AcademicPensieve\\Projects\\Tilings"]

Make::usage = "Make[targets, sources, action] makes a target, or a list of targets, given sources, or a list of sources, in the style of the unix 'make' command.";
Make[target_String, sources_, action_Hold] := Make[Evaluate@{target}, sources, action];
Make[targets_, source_String, action__Hold] := Make[targets, Evaluate@{source}, action];
Make[targets_List, sources_List, action_Hold] := Module[{},
If[
(And @@ ((FileType[#] =!= None)& /@ sources)) &&
Or[
Or @@ ((FileType[#]===None)& /@ targets),
Min[AbsoluteTime[FileDate[#]]& /@ targets] < Max[AbsoluteTime[FileDate[#]]& /@ sources]
],
Print["Making ",targets, " ..."];
ReleaseHold[action]
]
];

?Make

target = "ContactSheet.jpg";
sources = DeleteCases[FileNames[{"*/*.png", "*/*.jpg", "*/*.jpg"}], "333\\20180125_114714.jpg"|"333\\20180125_114732.jpg"|"333\\20180125_114911.jpg"|"442\\AtAgaKhan.jpg"|"thumbs\\APhaseDiagram.jpg"|"thumbs\\ConfusedAtCaraMiaNYC.jpg"|"thumbs\\ContactSheet.jpg"|"thumbs\\Karolina-1.jpg"|"thumbs\\Karolina-2.jpg"|"thumbs\\RandomlyPermuted.jpg"|"thumbs\\TerritorialDispute.jpg"|"previews\\APhaseDiagram.jpg"|"previews\\ConfusedAtCaraMiaNYC.jpg"|"previews\\ContactSheet.jpg"|"previews\\Karolina-1.jpg"|"previews\\Karolina-2.jpg"|"previews\\RandomlyPermuted.jpg"|"previews\\TerritorialDispute.jpg"];
Make[target, sources, Hold[
Read["!montage -resize 300x300 -gravity center -extent 300x300 -pointsize 24 -label %d/%t -geometry +0+0 -frame 2 -background white -bordercolor white -mattecolor white -tile 12 "<>StringJoin @@ Riffle[sources, " "]<>" "<>target];
MakeThumb@target;
MakePreview@target;
]];
target = "RandomlyPermuted.jpg";
Make[target, sources, Hold[
psources = Flatten[RandomSample[Partition[sources,2]]];
Read["!montage -resize 300x300 -gravity center -extent 300x300 -pointsize 24 -label %t -geometry +0+0 -frame 2 -background white -bordercolor white -mattecolor white -tile 12 "<>StringJoin @@ Riffle[psources, " "]<>" "<>target];
MakeThumb@target;
MakePreview@target;
]]

{}