I am trying … That’s a very clear organization
On Sep 16, 2014, at 19:57, Micha Hergarden <[email protected]> wrote: > Hello Yu, > > That is because of the following lines: > > AUX_SOURCE_DIRECTORY(. DIR_TARGET) > ADD_LIBRARY (relfiles ${DIR_TARGET}) > > I think you may be misusing the aux_source_directory command. I have tested > your setup on a linux machine with -j8 and it still builds. Did you take a > look at the openchemistry setup? > > Regards, > Micha > > On 09/16/2014 01:42 PM, Yu Jing wrote: >> Hello Micha, >> It seems still not work…. >> >> On Sep 16, 2014, at 17:36, Micha Hergarden <[email protected]> wrote: >> >>> Hello Yu, >>> >>> It seems I too needed another trick to make it work: >>> set_property(TARGET CRFPP_EX_PROJ PROPERTY EXCLUDE_FROM_ALL TRUE) >>> set_property(TARGET LEVELDB_EX_PROJ PROPERTY EXCLUDE_FROM_ALL TRUE) >>> >>> ADD_DEPENDENCIES(cmake_sample iniparser_static CRFPP_EX_PROJ >>> LEVELDB_EX_PROJ) >>> >>> By default the ExternalProject_Add will add that target to the ALL target, >>> and that confuses the Make dependency checker. I have removed those >>> dependencies in my project. On the whole I agree with Marcel Loose and Petr >>> Kmoch however. Combining their solution makes for a 'cleaner' project. To >>> be honest, I am halfway of migrating my project to a superbuild as well. >>> Take a look at the openchemistry project if you would like to see an >>> example of that: https://github.com/OpenChemistry/openchemistry >>> >>> Regards, >>> Micha Hergarden >>> >>> >>> On 09/16/2014 11:04 AM, Marcel Loose wrote: >>>> Hi Yu, >>>> >>>> I think you need to add an explicit dependency of main.cc on the >>>> "generated" (well, not really generated, but installed) header file >>>> crfpp.h. CMake has no clue as to what files are being compiled/installed >>>> by your external project, so you have to make this explicit. >>>> >>>> HTH, >>>> Marcel Loose. >>>> >>>> >>>> On 16/09/14 10:41, Yu Jing wrote: >>>>> Hello Micha , >>>>> >>>>> It seems doesn’t work. >>>>> I updated code , and move the external project to src , and it still not >>>>> work. >>>>> >>>>> what should be noticed is : >>>>> 1. If I just use >>>>> $ make >>>>> as make command ,all styles are work >>>>> 2. If I use in multi jobs >>>>> $ make -j8 >>>>> It will run abnormal (not desired sequence) . >>>>> >>>>> >>>>> On Sep 16, 2014, at 15:27, Micha Hergarden <[email protected]> >>>>> wrote: >>>>> >>>>>> It may be that you have line 63 and 64 the wrong way around: >>>>>> ADD_SUBDIRECTORY(src) >>>>>> ADD_SUBDIRECTORY(lib) >>>>>> >>>>>> The externalproject is added in lib, but you add a dependency on it in >>>>>> src. CMake will descend in the subdirectories in the order you supply >>>>>> them. >>>>>> Does reversing the directories help? >>>>>> >>>>>> Regards, >>>>>> Micha >>>>>> >>>>>> On 09/16/2014 09:17 AM, Yu Jing wrote: >>>>>>> I am in OSX 10.9.4 , a sample in github is : >>>>>>> https://github.com/yujing5b5d/cmake_sample >>>>>>> after git clone this project , a operation like this : >>>>>>> ------------------------------------------------------------------------------------------------------------ >>>>>>> >>>>>>> yu:cmake_sample yu$ mkdir build >>>>>>> yu:cmake_sample yu$ cd build/ >>>>>>> yu:build yu$ cmake .. >>>>>>> …. # skip some useless output >>>>>>> -- Configuring done >>>>>>> -- Generating done >>>>>>> -- Build files have been written to: >>>>>>> /Users/yu/Workspace/res/cmake_sample/build >>>>>>> yu:build yu$ make -j8 ### <<<<<<<<<<<<<<< >>>>>>> Scanning dependencies of target LEVELDB_EX_PROJ >>>>>>> Scanning dependencies of target iniparser >>>>>>> Scanning dependencies of target relfiles >>>>>>> Scanning dependencies of target CRFPP_EX_PROJ >>>>>>> Scanning dependencies of target iniparser_static >>>>>>> [ 15%] [ 15%] [ 20%] [ 20%] [ 25%] Building C object >>>>>>> lib/iniparser/CMakeFiles/iniparser_static.dir/ini.c.o >>>>>>> Creating directories for 'CRFPP_EX_PROJ' >>>>>>> Creating directories for 'LEVELDB_EX_PROJ' >>>>>>> Building C object lib/iniparser/CMakeFiles/iniparser.dir/ini.c.o >>>>>>> Building CXX object src/CMakeFiles/relfiles.dir/main.cc.o >>>>>>> [ 30%] [ 35%] Performing download step (git clone) for 'LEVELDB_EX_PROJ' >>>>>>> Performing download step (git clone) for 'CRFPP_EX_PROJ' >>>>>>> /Users/yu/Workspace/res/cmake_sample/src/main.cc:3:10: fatal error: >>>>>>> 'crfpp.h' file not found >>>>>>> #include "crfpp.h" // crfpp >>>>>>> ^ >>>>>>> Cloning into 'CRFPP_EX_PROJ'... >>>>>>> Cloning into 'LEVELDB_EX_PROJ'... >>>>>>> Linking C static library ../libiniparser.a >>>>>>> Linking C shared library ../libiniparser.dylib >>>>>>> [ 35%] [ 35%] Built target iniparser_static >>>>>>> Built target iniparser >>>>>>> Scanning dependencies of target cmake_sample >>>>>>> [ 40%] Building CXX object src/CMakeFiles/cmake_sample.dir/main.cc.o >>>>>>> /Users/yu/Workspace/res/cmake_sample/src/main.cc:3:10: fatal error: >>>>>>> 'crfpp.h' file not found >>>>>>> #include "crfpp.h" // crfpp >>>>>>> ^ >>>>>>> 1 error generated. >>>>>>> 1 error generated. >>>>>>> make[2]: *** [src/CMakeFiles/relfiles.dir/main.cc.o] Error 1 >>>>>>> make[2]: *** [src/CMakeFiles/cmake_sample.dir/main.cc.o] Error 1 >>>>>>> make[1]: *** [src/CMakeFiles/relfiles.dir/all] Error 2 >>>>>>> make[1]: *** Waiting for unfinished jobs.... >>>>>>> make[1]: *** [src/CMakeFiles/cmake_sample.dir/all] Error 2 >>>>>>> …. >>>>>>> ------------------------------------------------------------------------------------------------------------ >>>>>>> >>>>>>> BE CAREFUL OF THIS LINE : >>>>>>> >> yu:build yu$ make -j8 >>>>>>> >>>>>>> the ExternalProject CRFPP_EX_PROJ’s result contains copy a crfpp.h >>>>>>> header to a special path, after this process , we can use #include >>>>>>> “crfpp.h" ,and If I use >>>>>>> make -j8 >>>>>>> this means 8 jobs can be running at the same time, I can not >>>>>>> constraints and let my compiler compile my main.cc after CRFPP_EX_PROJ >>>>>>> finished. >>>>>>> >>>>>>> Of course , I’m not sure is this my misuse this project . >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Sep 16, 2014, at 14:55, Micha Hergarden <[email protected]> >>>>>>> wrote: >>>>>>> >>>>>>>> Hello all, >>>>>>>> >>>>>>>> I do use the ExternalProject to prebuild some binaries, without the >>>>>>>> 'superproject' setup, and it does seem to work. Using the >>>>>>>> add_dependencies, I can make sure some third party libs are prebuild >>>>>>>> before I start to build my project. I have seen some issues with >>>>>>>> ExternalProject (failing to extract, or build), but they are too rare >>>>>>>> to pinpoint and create a bugreport. >>>>>>>> >>>>>>>> What exactly does not work? Is the external project not build at all, >>>>>>>> or just not in time? >>>>>>>> >>>>>>>> Regards, >>>>>>>> Micha >>>>>>>> >>>>>>>> On 09/16/2014 08:30 AM, Petr Kmoch wrote: >>>>>>>>> Hi. >>>>>>>>> >>>>>>>>> I've never worked with ExternalProject myself, so I can't comment >>>>>>>>> with certainty, but from what I understand, the correct way of using >>>>>>>>> ExternalProject is to add your own project as an ExternalProject as >>>>>>>>> well. Basically, the toplevel CMakeList becomes a superbuild which >>>>>>>>> *only* does ExternalProject_Add() calls and does not add any >>>>>>>>> libraries/executables directly. After you build the superbuild once >>>>>>>>> to get all the dependencies correct, you switch to the "external" >>>>>>>>> project of your own code and work with that normally. >>>>>>>>> >>>>>>>>> Petr >>>>>>>>> >>>>>>>>> On Mon, Sep 15, 2014 at 4:13 PM, Yu Jing <[email protected]> wrote: >>>>>>>>> I had asked in http://stackoverflow.com/questions/25841602 , someone >>>>>>>>> told me maybe here is a better place to ask. >>>>>>>>> >>>>>>>>> I am writing a project base on crfpp , a external project. I use >>>>>>>>> cmake to integerate this project as follow . >>>>>>>>> >>>>>>>>> firstly , I add a extenal project like this: >>>>>>>>> >>>>>>>>> EXTERNALPROJECT_ADD( >>>>>>>>> CRFPP_EX_PROJ >>>>>>>>> GIT_REPOSITORY [email protected]:yujing5b5d/crfpp.git >>>>>>>>> PREFIX ${CMAKE_CURRENT_BINARY_DIR} >>>>>>>>> CONFIGURE_COMMAND ./configure >>>>>>>>> BUILD_COMMAND make -j8 >>>>>>>>> BUILD_IN_SOURCE 1 >>>>>>>>> INSTALL_COMMAND cp .libs/libcrfpp.a >>>>>>>>> ${PROJECT_BINARY_DIR}/lib && cp crfpp.h ${PROJECT_BINARY_DIR}/include >>>>>>>>> ) >>>>>>>>> this will generate some .a file and copy a header file crfpp.h to >>>>>>>>> folder ${PROJECT_BINARY_DIR}/include , which is included in my >>>>>>>>> project. >>>>>>>>> >>>>>>>>> and then , use the ${PROJECT_BINARY_DIR}/include as include path as >>>>>>>>> follow . >>>>>>>>> >>>>>>>>> INCLUDE_DIRECTORIES( >>>>>>>>> ${PROJECT_SOURCE_DIR}/include >>>>>>>>> ${PROJECT_BINARY_DIR}/include >>>>>>>>> ) >>>>>>>>> finally , when I compile the main project , code like this : >>>>>>>>> >>>>>>>>> ADD_EXECUTABLE(cmake_sample main.cc) >>>>>>>>> ADD_DEPENDENCIES(cmake_sample CRFPP_EX_PROJ) >>>>>>>>> TARGET_LINK_LIBRARIES(cmake_sample crfpp) >>>>>>>>> In general , if I just build a build folder, compile like this : >>>>>>>>> >>>>>>>>> cmake . >>>>>>>>> . >>>>>>>>> < >>>>>>>>> /span> >>>>>>>>> make >>>>>>>>> It may works fine, compile the external project first , and copy the >>>>>>>>> header file to desired place , and then continue compile main.cc in >>>>>>>>> my project . But if I use compile command as multi-thread like this : >>>>>>>>> >>>>>>>>> cmake >>>>>>>>> . >>>>>>>>> . >>>>>>>>> make -j8 >>>>>>>>> It will not works because my main.cc and the external project are >>>>>>>>> processed at same time, so it report a error like this : >>>>>>>>> >>>>>>>>> /Users/yu/Workspace/res/cmake_sample/src/main.cc:3:10: fatal error: >>>>>>>>> 'crfpp.h' file not found >>>>>>>>> #include "crfpp.h" // crfpp >>>>>>>>> ^ >>>>>>>>> 1 error generated. >>>>>>>>> This crfpp.h will generated after CRFPP_EX_PROJ , but in multi-thread >>>>>>>>> environment , the sequence is quite different . >>>>>>>>> >>>>>>>>> My Question is : Is it possible that force let my project compile >>>>>>>>> after these external projects all finished . BE CAREFUL , I'm not >>>>>>>>> sure is this the problem of my use of ADD_DEPENDENCIES , I also wrote >>>>>>>>> >>>>>>>>> ADD_DEPENDENCIES( >>>>>>>>> < >>>>>>>>> span >>>>>>>>> style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;background-repeat:initial >>>>>>>>> initial">cmake_sample CRFPP_EX_PROJ) >>>>>>>>> but it seems not works ? >>>>>>>>> >>>>>>>>> Thanks for any help. >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> >>>>>>>>> Powered by www.kitware.com >>>>>>>>> >>>>>>>>> Please keep messages on-topic and check the CMake FAQ at: >>>>>>>>> http://www.cmake.org/Wiki/CMake_FAQ >>>>>>>>> >>>>>>>>> Kitware offers various services to support the CMake community. For >>>>>>>>> more information on each offering, please visit: >>>>>>>>> >>>>>>>>> CMake Support: http://cmake.org/cmake/help/support.html >>>>>>>>> CMake Consulting: http://cmake.org/cmake/help/consulting.html >>>>>>>>> CMake Training Courses: http://cmake.org/cmake/help/training.html >>>>>>>>> >>>>>>>>> Visit other Kitware open-source projects at >>>>>>>>> http://www.kitware.com/opensource/opensource.html >>>>>>>>> >>>>>>>>> Follow this link to subscribe/unsubscribe: >>>>>>>>> http://public.kitware.com/mailman/listinfo/cmake >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>>> >>>>> >>>> >>>> >>>> >>> >>> -- >>> >>> Powered by www.kitware.com >>> >>> Please keep messages on-topic and check the CMake FAQ at: >>> http://www.cmake.org/Wiki/CMake_FAQ >>> >>> Kitware offers various services to support the CMake community. For more >>> information on each offering, please visit: >>> >>> CMake Support: http://cmake.org/cmake/help/support.html >>> CMake Consulting: http://cmake.org/cmake/help/consulting.html >>> CMake Training Courses: http://cmake.org/cmake/help/training.html >>> >>> Visit other Kitware open-source projects at >>> http://www.kitware.com/opensource/opensource.html >>> >>> Follow this link to subscribe/unsubscribe: >>> http://public.kitware.com/mailman/listinfo/cmake >> >
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake
