I am not sure, but you should write the cmake target-oriented(instead of using
variables). So you shouldn’t use `include_directories` either. It should be
written:
#
# Build static library
add_library(database database.cpp database.h)
target_compile_features(database PUBLIC cxx_defaulted_functions)
target_include_directories(database PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(database record spectogram)
And record and spectogram should be written in a similar fashion. By using
targets, you don’t have to worry about the targets being defined yet, so the
superproject doesn’t need to order the `add_subdirectory` calls(it can even
support circular dependencies).
Another thing, you shouldn’t declare another project unless you planning on
making it standalone. This means it should find the dependencies through
`find_package` and be installable with its usage requirements, which would be
written like this:
project(database)
find_package(record)
find_package(spectogram)
#
# Build static library
add_library(database database.cpp database.h)
target_compile_features(database PUBLIC cxx_defaulted_functions)
target_include_directories(database PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
target_link_libraries(database record spectogram)
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/database.h DESTINATION include)
install(TARGETS database EXPORT database-targets
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
INCLUDES DESTINATION include
)
install(EXPORT database-targets
FILE database-targets.cmake
DESTINATION lib/cmake/database
)
file(WRITE "${PROJECT_BINARY_DIR}/database-config.cmake" "
include(CMakeFindDependencyMacro)
find_dependency(record)
find_dependency(spectogram)
include(\"\${CMAKE_CURRENT_LIST_DIR}/database-targets.cmake\")
")
write_basic_package_version_file("${PROJECT_BINARY_DIR}/database-config-version.cmake"
VERSION 1.0
COMPATIBILITY AnyNewerVersion
)
install(FILES
"${PROJECT_BINARY_DIR}/database-config.cmake"
"${PROJECT_BINARY_DIR}/database-config-version.cmake"
DESTINATION lib/cmake/database
)
The dependencies can be found either through find_package for standalone or
through add_subdirectory in the superproject by overriding find_package. The
effective cmake talk describes how such setup works, here:
https://www.youtube.com/watch?v=bsXLMQ6WgIk
<https://www.youtube.com/watch?v=bsXLMQ6WgIk>
Or you can use a single project for all components.
> On Nov 12, 2017, at 8:04 AM, Carlton Banks <[email protected]> wrote:
>
> I am not sure I understand why I am having this problem..
> but cmake seem to have some problems with finding the header file located in
> a different project.
>
> tree view of my system: https://pastebin.com/AvydEbeW
>
> I’ve included the directory to the project which header files I am interested
> in, and also added the path in my
> target_inlcude_directories. The problems is my database.h cannot see record.h.
>
> database/CmakeLists.txt:
>
> https://pastebin.com/DpcMjtMa
>
> The weird part is that it sometimes is able to compile, and other times it
> get stuck with this not able to find the header?
>
> what could the problem be?
>
>
>
>
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake
--
Powered by www.kitware.com
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Kitware offers various services to support the CMake community. For more
information on each offering, please visit:
CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake