From 359058ff00e0fa713de8293b9332dda019782d2d Mon Sep 17 00:00:00 2001 From: "Michal A. Palczewski" Date: Sun, 24 Mar 2019 00:14:50 +0100 Subject: [PATCH 1/3] Fix CMake files for builds where project is built from outside directory E.g: When it's added as 3rd library using ADD_SUBDIRECTORY CMake command --- CMakeLists.txt | 2 +- cmake_scripts/install.cmake | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9c436c6..07527c1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,7 +123,7 @@ add_library(${PROJECT_NAME} ${SOURCES}) set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_OUTPUT_NAME restc-cppD) target_include_directories(${PROJECT_NAME} PUBLIC - $ + $ $ $ ) diff --git a/cmake_scripts/install.cmake b/cmake_scripts/install.cmake index d3afdae..a231a5c 100644 --- a/cmake_scripts/install.cmake +++ b/cmake_scripts/install.cmake @@ -35,7 +35,7 @@ export(EXPORT ${PROJECT_NAME}Targets SET(CONFIG_SOURCE_DIR ${CMAKE_SOURCE_DIR}) SET(CONFIG_DIR ${CMAKE_BINARY_DIR}) SET(${PROJECT_NAME}_INCLUDE_DIR "\${${PROJECT_NAME}_SOURCE_DIR}/include") -configure_package_config_file(${CMAKE_SOURCE_DIR}/cmake_scripts/${PROJECT_NAME}Config.cmake.in +configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake_scripts/${PROJECT_NAME}Config.cmake.in "${CMAKE_BINARY_DIR}/CMakePackage/${PROJECT_NAME}Config.cmake" INSTALL_DESTINATION lib/cmake/${PROJECT_NAME} PATH_VARS ${PROJECT_NAME}_INCLUDE_DIR) From 5adf6878149fdc4b4705afba201b889e685d003f Mon Sep 17 00:00:00 2001 From: "Michal A. Palczewski" Date: Sun, 24 Mar 2019 00:48:36 +0100 Subject: [PATCH 2/3] Replace all CMAKE_BINARY_PATH by PROJECT_BINARY_PATH It prevents placing any project specific build artifacts in common 'build' directory. --- CMakeLists.txt | 14 +++++++------- cmake_scripts/external-projects.cmake | 2 +- cmake_scripts/install.cmake | 18 +++++++++--------- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 07527c1..babdf8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,9 +18,9 @@ endif() include(cmake_scripts/external-projects.cmake) -if (EXISTS ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) - message(STATUS "Using conan configuration: ${CMAKE_BINARY_DIR}/conanbuildinfo.cmake") - include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake) +if (EXISTS ${PROJECT_BINARY_DIR}/conanbuildinfo.cmake) + message(STATUS "Using conan configuration: ${PROJECT_BINARY_DIR}/conanbuildinfo.cmake") + include(${PROJECT_BINARY_DIR}/conanbuildinfo.cmake) conan_basic_setup() endif() @@ -81,7 +81,7 @@ macro(SET_CPP_STANDARD target) endmacro(SET_CPP_STANDARD) # We create a configuration file so that other code that include our header files gets the correct configuration. -CONFIGURE_FILE(config.h.template ${CMAKE_BINARY_DIR}/generated-include/${PROJECT_NAME}/config.h) +CONFIGURE_FILE(config.h.template ${PROJECT_BINARY_DIR}/generated-include/${PROJECT_NAME}/config.h) set(ACTUAL_SOURCES src/ChunkedReaderImpl.cpp @@ -124,7 +124,7 @@ set_target_properties(${PROJECT_NAME} PROPERTIES DEBUG_OUTPUT_NAME restc-cppD) target_include_directories(${PROJECT_NAME} PUBLIC $ - $ + $ $ ) @@ -182,7 +182,7 @@ if (NOT EMBEDDED_RESTC_CPP) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") endif() - set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib CACHE PATH "Destination location") + set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib CACHE PATH "Destination location") link_directories(${LIBRARY_OUTPUT_PATH}) include(cmake_scripts/doxygen.cmake) @@ -197,7 +197,7 @@ if (NOT EMBEDDED_RESTC_CPP) endif() include(cmake_scripts/install.cmake) -install(DIRECTORY ${CMAKE_BINARY_DIR}/generated-include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +install(DIRECTORY ${PROJECT_BINARY_DIR}/generated-include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) if (RESTC_CPP_WITH_UNIT_TESTS OR RESTC_CPP_WITH_FUNCTIONALT_TESTS) enable_testing() diff --git a/cmake_scripts/external-projects.cmake b/cmake_scripts/external-projects.cmake index f47db71..f8b97ec 100644 --- a/cmake_scripts/external-projects.cmake +++ b/cmake_scripts/external-projects.cmake @@ -4,7 +4,7 @@ # add_dependencies(TARGET externalProjectName) # target_link_libraries(TARGET PRIVATE ExternalLibraryName) -set(EXTERNAL_PROJECTS_PREFIX ${CMAKE_BINARY_DIR}/external-projects) +set(EXTERNAL_PROJECTS_PREFIX ${PROJECT_BINARY_DIR}/external-projects) set(EXTERNAL_PROJECTS_INSTALL_PREFIX ${EXTERNAL_PROJECTS_PREFIX}/installed) include(ExternalProject) diff --git a/cmake_scripts/install.cmake b/cmake_scripts/install.cmake index a231a5c..2261999 100644 --- a/cmake_scripts/install.cmake +++ b/cmake_scripts/install.cmake @@ -13,11 +13,11 @@ generate_export_header(${PROJECT_NAME} EXPORT_MACRO_NAME EXPORT NO_EXPORT_MACRO_NAME NO_EXPORT PREFIX_NAME RESTC_CPP_ - EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/include-exports/${PROJECT_NAME}/export.h) + EXPORT_FILE_NAME ${PROJECT_BINARY_DIR}/include-exports/${PROJECT_NAME}/export.h) target_include_directories(${PROJECT_NAME} - PUBLIC $ $ + PUBLIC $ $ ) -install(DIRECTORY ${CMAKE_BINARY_DIR}/include-exports/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +install(DIRECTORY ${PROJECT_BINARY_DIR}/include-exports/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) include(CMakePackageConfigHelpers) set_property(TARGET ${PROJECT_NAME} PROPERTY VERSION ${PROJECT_VERSION}) @@ -25,18 +25,18 @@ set_property(TARGET ${PROJECT_NAME} PROPERTY SOVERSION ${PROJECT_VERSION_MAJOR}) set_property(TARGET ${PROJECT_NAME} PROPERTY INTERFACE_${PROJECT_NAME}_MAJOR_VERSION ${PROJECT_VERSION_MAJOR}) set_property(TARGET ${PROJECT_NAME} APPEND PROPERTY COMPATIBLE_INTERFACE_STRING ${PROJECT_VERSION_MAJOR}) write_basic_package_version_file( - "${CMAKE_BINARY_DIR}/CMakePackage/${PROJECT_NAME}ConfigVersion.cmake" + "${PROJECT_BINARY_DIR}/CMakePackage/${PROJECT_NAME}ConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion ) export(EXPORT ${PROJECT_NAME}Targets - FILE "${CMAKE_BINARY_DIR}/CMakePackage/${PROJECT_NAME}.cmake" + FILE "${PROJECT_BINARY_DIR}/CMakePackage/${PROJECT_NAME}.cmake" ) SET(CONFIG_SOURCE_DIR ${CMAKE_SOURCE_DIR}) -SET(CONFIG_DIR ${CMAKE_BINARY_DIR}) +SET(CONFIG_DIR ${PROJECT_BINARY_DIR}) SET(${PROJECT_NAME}_INCLUDE_DIR "\${${PROJECT_NAME}_SOURCE_DIR}/include") configure_package_config_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake_scripts/${PROJECT_NAME}Config.cmake.in - "${CMAKE_BINARY_DIR}/CMakePackage/${PROJECT_NAME}Config.cmake" + "${PROJECT_BINARY_DIR}/CMakePackage/${PROJECT_NAME}Config.cmake" INSTALL_DESTINATION lib/cmake/${PROJECT_NAME} PATH_VARS ${PROJECT_NAME}_INCLUDE_DIR) install(EXPORT ${PROJECT_NAME}Targets @@ -45,8 +45,8 @@ install(EXPORT ${PROJECT_NAME}Targets ) install( FILES - "${CMAKE_BINARY_DIR}/CMakePackage/${PROJECT_NAME}Config.cmake" - "${CMAKE_BINARY_DIR}/CMakePackage/${PROJECT_NAME}ConfigVersion.cmake" + "${PROJECT_BINARY_DIR}/CMakePackage/${PROJECT_NAME}Config.cmake" + "${PROJECT_BINARY_DIR}/CMakePackage/${PROJECT_NAME}ConfigVersion.cmake" DESTINATION lib/cmake/${PROJECT_NAME} COMPONENT Devel ) From f674bdc81cfe7cffe43a8d1baf38e1ee60f80ea9 Mon Sep 17 00:00:00 2001 From: "Michal A. Palczewski" Date: Sun, 24 Mar 2019 00:55:58 +0100 Subject: [PATCH 3/3] Remove link_directories call from CMakeLists.txt To prevent placing any build artifacts in original source dir (breaking shadow build idea) --- CMakeLists.txt | 3 --- 1 file changed, 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index babdf8a..f36db44 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -182,9 +182,6 @@ if (NOT EMBEDDED_RESTC_CPP) set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO") endif() - set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib CACHE PATH "Destination location") - link_directories(${LIBRARY_OUTPUT_PATH}) - include(cmake_scripts/doxygen.cmake) target_include_directories(${PROJECT_NAME}