[CMake] NMake Makefiles, 2.4.4 and target link libraries
Patrick J. Franz -- ML
patrick at xia.com
Tue Nov 28 21:54:47 EST 2006
Bill Hoffman wrote:
> There must be something else going on how is my_library_dep defined? Is
> it a cmake target?
Yes. It is built earlier via an include() command.
> The following works fine:
> add_library(bar SHARED bar.c)
> add_library(foo SHARED foo.c)
> target_link_libraries(foo bar)
>
> It also works if bar is not a cmake built library. Can you post the
> CMakeCache.txt from that project?
Sure. I've attached a sanitized version below of the top-level
CMakeLists.txt and the two that are pulled in via. include().
TOP-LEVEL CMAKELISTS.TXT
-------------------------
project(set_of_libraries C)
set(LIBRARY_OUTPUT_PATH lib)
add_subdirectory(components/component1)
add_subdirectory(components/component2)
include_directories(
inc
components/inc
components/component2/src
components/component1/src)
link_directories(
components/component2/lib
components/component1/lib
lib)
include(cmake/my_library_dep.cmake)
include(cmake/my_library.cmake)
MY_LIBRARY_DEP.CMAKE
--------------------
set(my_library_dep_sources
src/my_library_dep.c)
add_library(my_library_dep SHARED ${my_library_dep_sources})
target_link_libraries(my_library_dep setupapi component1)
set(my_library_dep_lib_name
${CMAKE_SHARED_LIBRARY_PREFIX}my_library_dep${CMAKE_SHARED_LIBRARY_SUFFIX})
add_custom_command(TARGET my_library_dep POST_BUILD
COMMAND cmake -E copy
ARGS lib/${my_library_dep_lib_name} t_api/${my_library_dep_lib_name})
MY_LIBRARY.CMAKE
----------------
set(my_library_sources
src/my_library.c
src/md_library_foo.c)
add_library(my_library SHARED ${my_library_sources})
target_link_libraries(my_library component2 my_library_dep)
set(my_library_lib_name
${CMAKE_SHARED_LIBRARY_PREFIX}my_library${CMAKE_SHARED_LIBRARY_SUFFIX})
add_custom_command(TARGET md POST_BUILD
COMMAND cmake -E copy
ARGS lib/${my_library_lib_name} t_api/${my_library_lib_name})
Looking at this, I suppose that if ${my_library_dep_lib_name} was also
an internal variable, that could explain how the link library names ends
up as ${my_library_dep_lib_name}.lib -> my_library.dll.lib?
Best Regards,
Patrick
More information about the CMake
mailing list