Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Building CPM modules independently from parent #13

Open
SteffenL opened this issue Aug 4, 2015 · 1 comment
Open

Building CPM modules independently from parent #13

SteffenL opened this issue Aug 4, 2015 · 1 comment

Comments

@SteffenL
Copy link

SteffenL commented Aug 4, 2015

I have adapted a C++ library I have made, for CPM. The library/module builds without issues when added to a (top-level) parent; however, attempting to build the module by itself yields in error messages, e.g. the following when building using Visual Studio 2013:

[snip]\cpm-packages\tests\ghost-git-repo\main.cpp(2): fatal error C1083: Cannot open include file: 'cpm-test-01/module.hpp': No such file or directory [[snip].vcxproj]

For some reason, CPM's tests are added to my VS project so that it attempts bulding the tests before my own code.

My CMakeLists.txt file currently looks mostly like this:

cmake_minimum_required(VERSION 3.2 FATAL_ERROR)


#-----------------------------------------------------------------------
# CPM configuration
#-----------------------------------------------------------------------

set(CPM_MODULE_NAME "my_library")
set(CPM_LIB_TARGET_NAME ${CPM_MODULE_NAME})

if ((DEFINED CPM_DIR) AND (DEFINED CPM_UNIQUE_ID) AND (DEFINED CPM_TARGET_NAME))
    set(CPM_LIB_TARGET_NAME ${CPM_TARGET_NAME})
    set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CPM_DIR})
    include(CPM)
else()
    set(CPM_DIR "${CMAKE_CURRENT_BINARY_DIR}/cpm-packages" CACHE TYPE STRING)
    find_package(Git)
    if(NOT GIT_FOUND)
        message(FATAL_ERROR "CPM requires Git.")
    endif()
    if (NOT EXISTS ${CPM_DIR}/CPM.cmake)
        message(STATUS "Cloning repo (https://github.com/iauns/cpm)")
        execute_process(
        COMMAND "${GIT_EXECUTABLE}" clone https://github.com/iauns/cpm ${CPM_DIR}
        RESULT_VARIABLE error_code
        OUTPUT_QUIET ERROR_QUIET)
        if(error_code)
            message(FATAL_ERROR "CPM failed to get the hash for HEAD")
        endif()
    endif()
    include(${CPM_DIR}/CPM.cmake)
endif()

# Include CPM modules or externals here (with CPM_AddModule).

CPM_AddModule("dep_name"
  GIT_REPOSITORY "repo_url"
  GIT_TAG "tag_name")

CPM_InitModule(${CPM_MODULE_NAME})
CPM_ExportAdditionalLibraryTarget(${CPM_LIB_TARGET_NAME})


#-----------------------------------------------------------------------
# Source
#-----------------------------------------------------------------------

file(GLOB_RECURSE Sources src
  "*.cpp"
)


#-----------------------------------------------------------------------
# Library setup
#-----------------------------------------------------------------------

add_library(${CPM_LIB_TARGET_NAME} SHARED ${Sources})
target_link_libraries(${CPM_LIB_TARGET_NAME} ${CPM_LIBRARIES})

Thank you for any assistance you can provide.

@SteffenL
Copy link
Author

SteffenL commented Aug 5, 2015

I finally figured out that this issue only exists when the current working directory (when running cmake and the build command) is inside the module's root directory).. So I guess CMake automatically picks up the tests in module root/build dir/cpm-packages/tests. I don't know why this doesn't happen when there is a parent project.

My "solution" so far is to not build inside the module's directory whenever I build the module separately from a parent.

Example:

projects
  ├─ my_module/CMakeLists.txt
  └─ my_module-build

Is this the intended way to go about it?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant