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 <micha.hergar...@gmail.com > <mailto:micha.hergar...@gmail.com>> 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 >>> <http://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 >>>> <micha.hergar...@gmail.com <mailto: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 >>>>>> <http://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 >>>>>> <http://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 >>>>>> <http://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 <mailto: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 >>>>>>>> <mailto: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 . >>>>>>>> . >>>>>>>> < >>>>>>>> /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 <http://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 <http://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 <http://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 <http://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 >
signature.asc
Description: OpenPGP digital signature
-- 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