> Den 29. okt. 2017 kl. 02.06 skrev J Decker <d3c...@gmail.com>:
> 
> I recently added externaproject_add() to download a library, but since it 
> doesn't do the download until build, I had to put a conditional around the 
> second part of the cmake that used the libraries it produced so it would do a 
> cmake configure/generate, cmake build, cmake configure/generate and a final 
> build and all was good... 
> 
Yes… that sound exactly like the problem I am currently facing..
> https://github.com/d3x0r/sack.vfs/blob/master/CMakeLists.gui.txt#L61 
> <https://github.com/d3x0r/sack.vfs/blob/master/CMakeLists.gui.txt#L61>
I am not sure I understand how your if statement fixes this?.. when does it 
download?
> 
> but I coudln't reference any directories that didn't exist yet in 
> include_directories, or link_directories...until the project had been at 
> least partially built.
> 
> On Sat, Oct 28, 2017 at 6:00 PM, Craig Scott <craig.sc...@crascit.com 
> <mailto:craig.sc...@crascit.com>> wrote:
it still doesn’t work… 

I am bit unsure of what is being done here..  I need to include the 
libraryportaudio.a to include portaudio into the project. 

which causes an error as the download only occurs during build (make) and not 
during cmake. 

> Ah, sorry. This particular problem has been fixed 
> <https://gitlab.kitware.com/cmake/cmake/merge_requests/1264> on CMake master, 
> but it won't be in the 3.10 release (in release candidate stage), so that 
> isn't going to help you right now. Possibly you might be able to modify the 
> relevant target property directly rather than using 
> target_include_directories() - again this is untested, but worth a try:
> 
> set_property(TARGET portaudio APPEND PROPERTY
>     INTERFACE_INCLUDE_DIRECTORIES ${SOURCE_DIR}/include
> )
> 
> If that doesn't work, then I guess modifying your original method to use the 
> correct path may be an alternative workaround:
> 
> target_include_directories(record PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 
> ${SOURCE_DIR}/include)
> 
> 
> 
> 
> On Sun, Oct 29, 2017 at 11:47 AM, Carlton Banks <nofl...@gmail.com 
> <mailto:nofl...@gmail.com>> wrote:
> 
>> Den 29. okt. 2017 kl. 02.29 skrev Craig Scott <craig.sc...@crascit.com 
>> <mailto:craig.sc...@crascit.com>>:
>> 
>> 
>> 
>> On Sun, Oct 29, 2017 at 11:26 AM, Carlton Banks <nofl...@gmail.com 
>> <mailto:nofl...@gmail.com>> wrote:
>> CMake Error at src/include/record/CMakeLists.txt:28 
>> (target_include_directories):
>>   Cannot specify include directories for imported target "portaudio".
>> 
>> 
>> is the problem that externalProject_add only is executed when make is 
>> executed and not when cmake is executed’?
>> what is `portaudio` here referring to?
>> 
>> The name "portaudio" is the target defined by the add_library() call in my 
>> example (the imported target that represents what the ExternalProject_Add() 
>> is going to create at build time).
> 
>       ok.
> 
>> Did you also try the INTERFACE IMPORTED alternative?
> 
> Still the same.. 
> 
>> It would be more useful if you showed the full CMakeLists.txt rather than 
>> just the error message.
>> 
> 
> The submodule cmakelist: 
> 
> https://pastebin.com/x2WNhK56 <https://pastebin.com/x2WNhK56>
> 
> tree structure
> 
> https://pastebin.com/xhPNCkN2 <https://pastebin.com/xhPNCkN2>
> 
> The outer cmakelist includes the inner directories. 
> 
>> 
>>  
>>> Den 29. okt. 2017 kl. 02.19 skrev Craig Scott <craig.sc...@crascit.com 
>>> <mailto:craig.sc...@crascit.com>>:
>>> 
>>> 
>>> 
>>> On Sun, Oct 29, 2017 at 10:36 AM, Carlton Banks <nofl...@gmail.com 
>>> <mailto:nofl...@gmail.com>> wrote:
>>> I seem to have some problems executing one of my submodules cmakelist.
>>> 
>>> MESSAGE(“In record CMAKELIST”)
>>> 
>>> # Include externalproject {portaudio} if lib/portaudio don't exist.
>>> MESSAGE(“Download external project”)
>>> 
>>> INCLUDE(ExternalProject)
>>> ExternalProject_Add(project_portaudio
>>>     GIT_REPOSITORY      https://git.assembla.com/portaudio.git 
>>> <https://git.assembla.com/portaudio.git>
>>>     PREFIX              lib/portaudio
>>>     CONFIGURE_COMMAND   <SOURCE_DIR>/configure
>>>     BUILD_IN_SOURCE     1
>>>     BUILD_COMMAND       make
>>>     INSTALL_COMMAND     sudo make install
>>> )
>>> ExternalProject_Get_Property(project_portaudio BINARY_DIR)
>>> ExternalProject_Get_Property(project_portaudio SOURCE_DIR)
>>> 
>>> SET(portaudio_lib_dir "${BINARY_DIR}/lib/.libs")
>>> SET(portaudio_inc_dir "${SOURCE_DIR}/include")
>>> 
>>> add_library(record STATIC record.cpp record.h)
>>> add_library(libaudio libportaudio.a PATHS ${portaudio_lib_dir})
>>> 
>>> What is this second add_library() command intended to do? I'm guessing you 
>>> probably instead want to be doing something like this (untested, but 
>>> hopefully in the ballpark):
>>> 
>>> add_library(portaudio STATIC IMPORTED)
>>> set_target_properties(portaudio PROPERTIES
>>>     IMPORTED_LOCATION ${BINARY_DIR}/lib/.libs/libportaudio.a
>>> )
>>> target_include_directories(portaudio INTERFACE
>>>     ${SOURCE_DIR}/include
>>> )
>>> add_dependencies(portaudio project_portaudio)     # Not sure if this is 
>>> allowed for imported targets though
>>> 
>>> I don't recall off the top of my head whether STATIC IMPORTED or INTERFACE 
>>> IMPORTED would be the right way to call add_library() in the above, so try 
>>> the latter if the former doesn't work for you. 
>>> 
>>> 
>>> 
>>> 
>>> 
>>> #
>>> # this makes sure we have compiler flags that allow class::class() = 
>>> default (>= C++11)
>>> target_compile_features(record PUBLIC cxx_defaulted_functions)
>>> 
>>> 
>>> 
>>> 
>>> target_include_directories(record PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} 
>>> ${project_portaudio})
>>> 
>>> You won't need this if you define the portaudio imported library as per my 
>>> example above.
>>> 
>>>  
>>> 
>>> 
>>> It cannot find libportaudio.a as externalproject_add() is not being 
>>> executed, the command it executes add_library, which fails as the project 
>>> has not been downloaded…
>>> 
>>> 
>>> what is wrong here?
>>> 
>>> The reason for this specific problem is that there's no dependency 
>>> relationship between the project_portaudio target defined by the 
>>> ExternalProject_Add() call and the record target. Such a relationship is 
>>> only created through a suitable call to target_link_libraries() or 
>>> add_dependencies(), or through arguments like DEPENDS for commands that 
>>> offer such features (e.g. add_custom_target() and add_custom_command()).
>>> 
>>> 
>>> -- 
>>> Craig Scott
>>> Melbourne, Australia
>>> https://crascit.com <https://crascit.com/>
>> 
>> 
>> 
>> 
>> -- 
>> Craig Scott
>> Melbourne, Australia
>> https://crascit.com <https://crascit.com/>
> 
> 
> 
> 
> -- 
> Craig Scott
> Melbourne, Australia
> https://crascit.com <https://crascit.com/>
> 
> --
> 
> 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 <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 
> <http://cmake.org/cmake/help/support.html>
> CMake Consulting: http://cmake.org/cmake/help/consulting.html 
> <http://cmake.org/cmake/help/consulting.html>
> CMake Training Courses: http://cmake.org/cmake/help/training.html 
> <http://cmake.org/cmake/help/training.html>
> 
> Visit other Kitware open-source projects at 
> http://www.kitware.com/opensource/opensource.html 
> <http://www.kitware.com/opensource/opensource.html>
> 
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake 
> <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