| # Always build in a predictable configuration. For multi-config |
| # generators we depend on RunCMakeTest.cmake to do this for us. |
| get_property(_isMultiConfig GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) |
| if(NOT _isMultiConfig) |
| set(CMAKE_BUILD_TYPE Debug) |
| endif() |
| |
| # Convince CMake that it can instruct the linker to search for the |
| # library of the proper linkage type, but do not really pass flags. |
| set(CMAKE_EXE_LINK_STATIC_C_FLAGS " ") |
| set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS " ") |
| |
| # Make a link line asking for the linker to search for the library |
| # look like a missing object file so we will get predictable content |
| # in the error message. This also ensures that cases expected to use |
| # the full path can be verified by confirming that they link. |
| set(CMAKE_LINK_LIBRARY_FLAG LINKFLAG_) |
| set(CMAKE_LINK_LIBRARY_SUFFIX _LINKSUFFIX${CMAKE_C_OUTPUT_EXTENSION}) |
| |
| # Convince CMake that our library is in an implicit linker search directory. |
| list(APPEND CMAKE_C_IMPLICIT_LINK_DIRECTORIES ${CMAKE_CURRENT_BINARY_DIR}/lib) |
| |
| # Create a simple library file. Place it in our library directory. |
| add_library(CMP0060 STATIC cmp0060.c) |
| set_property(TARGET CMP0060 PROPERTY |
| ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR}/lib) |
| |
| # Add a target to link the library file by full path. |
| add_executable(main1 main.c) |
| target_link_libraries(main1 $<TARGET_FILE:CMP0060>) |
| add_dependencies(main1 CMP0060) |
| |
| # Add a second target to verify the warning only appears once. |
| add_executable(main2 main.c) |
| target_link_libraries(main2 $<TARGET_FILE:CMP0060>) |
| add_dependencies(main2 CMP0060) |