Я работаю над основным проектом, имеющим несколько сторонних библиотек. Моя цель состоит в том, чтобы импортировать все из них в качестве импортированной цели для ясности, но я не могу заставить ее работать. Это в основном набор статических библиотек (.lib/lib .a) и их заголовки.Связать статические библиотеки с основным проектом через импортированный объект
Для обсуждения главным является главная цель, третье - импортированное третье лицо.
Мне удалось создать правильное решение Visual Studio в Windows, но в Linux это не работает. При построении решения, я в конечном итоге с этой ошибкой:
"No rule to make target 'Third-NOTFOUND', needed by '../Bin/Main'"
Вот некоторые фрагменты кода из моих CMakeLists.txt годов.
Мэйн CMakeLists.txt:
project(Main)
[...]
add_subdirectory(ThirdParty/Third)
set_property(TARGET Third PROPERTY FOLDER "thirdparty")
[...]
add_executable(Main ${SOURCES})
target_link_libraries(Main PRIVATE Third)
ТРЕТЬЕГО в CMakeLists.txt:
project(Third)
[...]
# Helper function
function(append_lib target lib_debug_dir lib_release_dir name)
set_property(TARGET ${target} APPEND PROPERTY IMPORTED_LOCATION_DEBUG "${lib_debug_dir}/${LIB_NAME}")
set_property(TARGET ${target} APPEND PROPERTY IMPORTED_LOCATION_RELEASE "${lib_release_dir}/${LIB_NAME}")
endfunction()
[...]
add_library(Third STATIC IMPORTED GLOBAL)
set_property(TARGET Third APPEND PROPERTY PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${INCLUDE_DIR}")
append_lib(Third ${LIB_DIR_DEBUG} ${LIB_DIR_RELEASE} libMyLib1.a)
NB: Код для Linux и Windows, один и те же, за исключением имени статической библиотеки (это само MyLib1.lib заменяет libMyLib1.a)
Что я делаю неправильно? Спасибо :)
Это вопрос пути? Этот ответ относится к вам: http://stackoverflow.com/questions/14077611/how-do-i-tell-cmake-to-link-in-a-static-library-in-the-source-directory –
I не думайте так. Я только что проверил это снова, это все правильные абсолютные пути. –
Если вы проверите сгенерированный Makefile, вы видите абсолютные пути там? –