Я изучаю CMake и немного борюсь с ним.Мой «проект» использует «библиотеку» JsonCpp, которая была предоставлена в виде одного файла .cpp и двух файлов .h.Структура выглядит следующим образом:
myProject
build/
json/
CMakeLists.txt
jsoncpp.cpp
include/
json.h
json-forward.h
CMakeLists.txt
main.cpp
build / CMakeLists.txt:
cmake_minimum_required(VERSION 3.6.0)
project(myProject)
add_subdirectory(json)
add_executable(app main.cpp)
target_link_libraries(app PRIVATE json)
# add_executable(app main.cpp json/jsoncpp.cpp json/include/json.h json/include/json-forwards.h)
json / CMakeLists.txt:
cmake_minimum_required(VERSION 3.6.0)
add_library(
json
jsoncpp.cpp
include/json.h
include/json-forwards.h
)
target_include_directories(json PUBLIC '${CMAKE_CURRENT_SOURCE_DIR}/include')
В чем разница между использованиемтолько add_executable () со всеми файлами .cpp и использованием target_link_libraries, который преобразует jsoncpp в статическую библиотеку и затем связывает ее?Какой подход мне выбрать?
Следующая вещь, которая меня смущает, - target_include_directories ().Каковы преимущества использования этой функции?Если я прокомментирую это, и запустите cmake (затем makefile и запустите приложение), все будет работать нормально.Если я удаляю «include / json.h», «include / json-forward.h» из add_library (), все по-прежнему работает.