Hi,
I'd like to make some code in my build system dependent on the existance of a
target. Basically I'd like to write something like this:
if(TARGET optional_lib)
add_library(bar ${bar_srcs})
target_link_library(bar optional_lib)
endif()
The problem I have is that for a couple of reasons the CMakelists file for bar
needs to be read before optional_lib. Therefore the "TARGET optional_lib" test
fails even though I can link bar successfully against optional_lib.
As a simple test case, consider the following:
#CMakeLists.txt:
cmake_minimum_required ( VERSION 2.8.9 )
add_executable ( main ${CMAKE_CURRENT_SOURCE_DIR}/main.c )
target_link_libraries ( main foo )
if ( NOT TARGET foo )
message("foo is not a target")
endif()
add_library(foo ${CMAKE_CURRENT_SOURCE_DIR}/foo.c)
##
#foo.c:
int FOO=23;
##
#main.c:
extern int FOO;
int main() {
return FOO;
}
##
Running CMake on this project prints "foo is not a target", but main is built
and linked successfully and correctly.
I'm currently working around the issue by letting the optional lib set a cache
variable and testing for the variable instead of the target. Is there a way to
actually get the information from the bulid system, or is this a hard limit of
the CMake parser?
Cheers,
Johannes
--
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://www.cmake.org/mailman/listinfo/cmake