SET(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin) SET(EXECUTABLE_OUTPUT_PATH ${CMAKE_CURRENT_BINARY_DIR}/bin) IF(CMAKE_CONFIGURATION_TYPES) SET(sub_CONFIG_TYPE -C "${CMAKE_CFG_INTDIR}") ELSE(CMAKE_CONFIGURATION_TYPES) SET(sub_CONFIG_TYPE) ENDIF(CMAKE_CONFIGURATION_TYPES) ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/sub-fake COMMAND ${CMAKE_CTEST_COMMAND} ARGS ${sub_CONFIG_TYPE} --build-and-test ${CMAKE_CURRENT_SOURCE_DIR}/sub # dir containing CMakeLists.txt file # which could probably do # a glob to find sources ${CMAKE_CURRENT_BINARY_DIR}/sub-build # where to build it --build-noclean --build-two-config --build-project sub # name of library from sub/CMakeLists.txt --build-generator ${CMAKE_GENERATOR} --build-makeprogram ${CMAKE_MAKE_PROGRAM} --build-options # put compiled library where we want it -DLIBRARY_OUTPUT_PATH:PATH=${LIBRARY_OUTPUT_PATH} # can/should add other options such as compilers, # build type, compile flags, etc ... ) ADD_CUSTOM_TARGET(sub-target ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/sub-fake) INCLUDE_DIRECTORIES(sub) ADD_EXECUTABLE(main main.cpp) TARGET_LINK_LIBRARIES(main ${LIBRARY_OUTPUT_PATH}/libsub.a) # full path for dependencies ADD_DEPENDENCIES(main sub-target) # make sure sub is built before building executable