Hello All,
        It is is because of 
# AUX_SOURCE_DIRECTORY(. DIR_TARGET)
# ADD_LIBRARY (relfiles ${DIR_TARGET})

        That’s really a stupid fault ,and thanks for your debug …TAT

        I adjust the usage of External project , and it seems much better . 
Thanks for your help . Thanks for Micha Hergarden’s patience …

        By the way , 
set_property(TARGET leveldb_proj PROPERTY EXCLUDE_FROM_ALL TRUE) 
         I removed this property and it seems still works.



On Sep 16, 2014, at 19:58, Yu Jing <yujing5...@gmail.com> wrote:

> I am trying … That’s a very clear organization 
> 
> 
> On Sep 16, 2014, at 19:57, Micha Hergarden <micha.hergar...@gmail.com> 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 <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 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> 
>>>>>> 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 .
>>>>>>>>>> .
>>>>>>>>>>  <
>>>>>>>>>> /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

Reply via email to