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

Reply via email to