Here is a sample CMakeLists.txt to illustrate that two custom targets cannot depend on each other:
PROJECT(BUG C) CMAKE_MINIMUM_REQUIRED(VERSION 2.8) ADD_CUSTOM_COMMAND( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/fileOne" COMMAND "${CMAKE_COMMAND}" ARGS "-E" "touch" "${CMAKE_CURRENT_BINARY_DIR}/fileOne") ADD_CUSTOM_TARGET(targetFileOne DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/fileOne") ADD_CUSTOM_COMMAND( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/fileOne-s" COMMAND "${CMAKE_COMMAND}" ARGS "-E" "touch" "${CMAKE_CURRENT_BINARY_DIR}/fileOne-s") ADD_CUSTOM_TARGET(targetFileOneS ALL DEPENDS targetFileOne "${CMAKE_CURRENT_BINARY_DIR}/fileOne-s") $ gmake Scanning dependencies of target targetFileOne [ 0%] Generating fileOne [ 50%] Built target targetFileOne Scanning dependencies of target targetFileOneS gmake[2]: *** No rule to make target `targetFileOne', needed by `CMakeFiles/targetFileOneS'. Stop. gmake[1]: *** [CMakeFiles/targetFileOneS.dir/all] Error 2 gmake: *** [all] Error 2 So I am back to my problem that I cannot compile my project in parallel. The question is: How to implement mutexes in CMake scripts? Denis --- On Thu, 11/18/10, David Cole <david.c...@kitware.com> wrote: > From: David Cole <david.c...@kitware.com> > Subject: Re: [CMake] Problems with parallel builds > To: "Denis Scherbakov" <denis_scherba...@yahoo.com> > Cc: cmake@cmake.org > Date: Thursday, November 18, 2010, 6:43 AM > Try: > ADD_CUSTOM_TARGET(MyHeaders ALL DEPENDS MyFile.hh) > > Without the "ALL" your target is not included in the set of > targets > built by a "make" or a "make all" -- without your target > included in > "make" there is nothing for the subsequent targets to > depend on. > Perhaps we should add a warning to add_dependencies if > expressing a > dependency on something not in "all" by default.... > > > On Thu, Nov 18, 2010 at 9:33 AM, Denis Scherbakov > <denis_scherba...@yahoo.com> > wrote: > > Hi, David, > > > > I did as you suggested: > > > > ADD_CUSTOM_COMMAND(OUTPUT MyFile.hh ...) > > ADD_CUTSOM_TARGET(MyHeaders DEPENDS MyFile.hh) > > > > ADD_LIBRARY(MYLIB ${MYLIB_SRCS}) > > ADD_DEPENDENCIES(MYLIB MyHeaders) > > > > ADD_LIBRARY(MYLIBpic ${MYLIB_SRCS}) > > ADD_DEPENDENCIES(MYLIBpic MyHeaders) > > > > Didn't work. Target "MyHeaders" is build two times > when I do "gmake -j2" > > I see two "Generating MyFile.hh" lines and MyFile.hh > has duplicate lines. > > > > Denis > > > >> David Cole wrote: > >> > >> The easiest way to make this work is to have a > separate > >> custom target > >> that depends on the output of the custom command, > and then > >> to have the > >> two libraries depend on that custom target with > >> add_dependencies... > >> > > > > > > > > > _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake