LINUX.ORG.RU

[cmake] Линковка программы со статической библиотекой


0

0

Есть программа в папке src/app. Есть стат. либа в src/statlib. Есть 3 CMakeLists.txt: в каждой из папок и в src/. В последней указаны add_subdirectory() на обе папки в порядке src/app, src/statlib с указанием ложить билды в ../build (папка выше src).

add_subdirectory(statlib ../build)
add_subdirectory(app ../build)

Компиляция app требует скомпилированной стат. либы. В CMakeLists.txt в src/app указываю слинковать со стат. либой.

add_library(statlib STATIC IMPORTED)
set_property(TARGET statlib PROPERTY IMPORTED_LOCATION ../../build/libstatlib.a)

add_executable(app ${app_SRCS})
target_link_libraries(app ${CMAKE_REQUIRED_LIBRARIES} config++ statlib

Когда запускаю cmake . и make из src/app - все компилится и работает. Когда делаю аналогичное из src/, как, по идее, и надо - не работает - не может найти стат. либу.

/usr/bin/ld: cannot find -l../../build/libstatlib.a

Как сделать, чтобы собиралась app из директории src/?

P.S. Перепробовал все варианты указания линковки со стат. либой и все пути, которые только можно к ней. Копировал либу даже в директорию app/ - все бестолку. Гугл нихрена не говорит.

★★

Использовать абсолютные пути через CMAKE_BINARY_DIR или <project>_BINARY_DIR не пробовали?

Вместо явного указания ../build лучше все таки использовать out-of-source build (mkdir build && cd build && cmake ..)

ntp ()
Ответ на: комментарий от ntp

Раньше делал так, потом, не помню почему, перешел к тепершнему варианту.

Да, второй вариант работает. Спасибо.

bk_ ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.