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 <micha.hergar...@gmail.com> 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 <micha.hergar...@gmail.com> 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 <yujing5...@gmail.com> 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 g...@github.com: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 .. >>>> 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