Link test target against neccassary libraries
In addition to previous libs, also link against - same libs as app/lib target - the app target itself if required
This commit is contained in:
parent
4829aa40b9
commit
00f7795dcd
|
@ -111,7 +111,7 @@ set(META_APP_AUTHOR "Martchus")
|
|||
set(META_APP_URL "https://github.com/${META_APP_AUTHOR}/${META_PROJECT_NAME}")
|
||||
set(META_APP_DESCRIPTION "Common C++ classes and routines used by my applications such as argument parser, IO and conversion utilities")
|
||||
set(META_VERSION_MAJOR 4)
|
||||
set(META_VERSION_MINOR 0)
|
||||
set(META_VERSION_MINOR 1)
|
||||
set(META_VERSION_PATCH 0)
|
||||
|
||||
# find required 3rd party libraries
|
||||
|
|
|
@ -29,6 +29,12 @@ set_target_properties(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} PROPE
|
|||
LINK_SEARCH_END_STATIC ${STATIC_LINKAGE}
|
||||
)
|
||||
|
||||
if(MAKE_APP_TARGET_LINKABLE OR LINK_TESTS_AGAINST_APP_TARGET)
|
||||
set_target_properties(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX} PROPERTIES
|
||||
ENABLE_EXPORTS ON
|
||||
)
|
||||
endif()
|
||||
|
||||
# add install target for binary
|
||||
install(TARGETS ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}
|
||||
RUNTIME DESTINATION bin
|
||||
|
|
|
@ -14,27 +14,42 @@ if(CPP_UNIT_LIB)
|
|||
endif()
|
||||
|
||||
# add test executable, but exclude it from the "all target"
|
||||
add_executable(${META_PROJECT_NAME}_tests EXCLUDE_FROM_ALL ${TEST_HEADER_FILES} ${TEST_SRC_FILES})
|
||||
add_executable(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_tests EXCLUDE_FROM_ALL ${TEST_HEADER_FILES} ${TEST_SRC_FILES})
|
||||
|
||||
# test applications of my projects always use c++utilities and cppunit
|
||||
if(NOT META_PROJECT_TYPE OR "${META_PROJECT_TYPE}" STREQUAL "library") # default project type is library
|
||||
# when testing a library, the test application always needs to link against it
|
||||
if(BUILD_SHARED_LIBS)
|
||||
list(APPEND TEST_LIBRARIES ${META_PROJECT_NAME})
|
||||
list(APPEND TEST_LIBRARIES ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX})
|
||||
message(STATUS "Linking test target dynamically against ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}")
|
||||
else()
|
||||
list(APPEND TEST_LIBRARIES ${META_PROJECT_NAME}_static)
|
||||
list(APPEND TEST_LIBRARIES ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_static)
|
||||
message(STATUS "Linking test target statically against ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}")
|
||||
endif()
|
||||
else()
|
||||
# otherwise, the tests application needs the path of the application to be tested
|
||||
endif()
|
||||
if("${META_PROJECT_TYPE}" STREQUAL "application")
|
||||
# the tests application might need the path of the application to be tested
|
||||
set(APPLICATION_PATH "-a ${CMAKE_CURRENT_BINARY_DIR}/${META_PROJECT_NAME}")
|
||||
# linking tests against the application target might be required
|
||||
# somehow this doesn't work when just specifying the applications target, so we need to specify the full path of the
|
||||
# target executable
|
||||
if(LINK_TESTS_AGAINST_APP_TARGET)
|
||||
list(APPEND TEST_LIBRARIES "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}")
|
||||
add_dependencies(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_tests ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
target_link_libraries(${META_PROJECT_NAME}_tests ${TEST_LIBRARIES})
|
||||
set_target_properties(${META_PROJECT_NAME}_tests PROPERTIES CXX_STANDARD 11)
|
||||
add_test(NAME ${META_PROJECT_NAME}_cppunit COMMAND ${META_PROJECT_NAME}_tests -p "${CMAKE_CURRENT_SOURCE_DIR}/testfiles" ${APPLICATION_PATH})
|
||||
target_link_libraries(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_tests ${ACTUAL_ADDITIONAL_LINK_FLAGS} ${TEST_LIBRARIES} ${LIBRARIES})
|
||||
set_target_properties(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_tests PROPERTIES
|
||||
CXX_STANDARD 11
|
||||
COMPILE_DEFINITIONS "${ACTUAL_ADDITIONAL_COMPILE_DEFINITIONS}"
|
||||
LINK_SEARCH_START_STATIC ${STATIC_LINKAGE}
|
||||
LINK_SEARCH_END_STATIC ${STATIC_LINKAGE}
|
||||
)
|
||||
add_test(NAME ${META_PROJECT_NAME}_cppunit COMMAND ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_tests -p "${CMAKE_CURRENT_SOURCE_DIR}/testfiles" ${APPLICATION_PATH})
|
||||
|
||||
# add the test executable to the dependencies of the check target
|
||||
add_dependencies(check ${META_PROJECT_NAME}_tests)
|
||||
add_dependencies(check ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_tests)
|
||||
|
||||
# add target for launching tests with wine ensuring the WINEPATH is set correctly so wine is able to find all required *.dll files
|
||||
# requires script from c++utilities, hence the sources of c++utilities must be present
|
||||
|
@ -43,8 +58,8 @@ if(CPP_UNIT_LIB)
|
|||
if(CMAKE_FIND_ROOT_PATH)
|
||||
list(APPEND RUNTIME_LIBRARY_PATH "${CMAKE_FIND_ROOT_PATH}/bin")
|
||||
endif()
|
||||
add_custom_target(${META_PROJECT_NAME}_run_tests COMMAND "${CPP_UTILITIES_SOURCE_DIR}/scripts/wine.sh" "${CMAKE_CURRENT_BINARY_DIR}/${META_PROJECT_NAME}_tests.${WINDOWS_EXT}" ${RUNTIME_LIBRARY_PATH})
|
||||
add_dependencies(${META_PROJECT_NAME}_run_tests ${META_PROJECT_NAME}_tests)
|
||||
add_custom_target(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_run_tests COMMAND "${CPP_UTILITIES_SOURCE_DIR}/scripts/wine.sh" "${CMAKE_CURRENT_BINARY_DIR}/${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_tests.${WINDOWS_EXT}" ${RUNTIME_LIBRARY_PATH})
|
||||
add_dependencies(${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_run_tests ${TARGET_PREFIX}${META_PROJECT_NAME}${TARGET_SUFFIX}_tests)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
|
Loading…
Reference in New Issue