Связывание файлов нескольких объектов, созданных Makefile, с подкаталогом CMake - PullRequest
0 голосов
/ 29 января 2020

У меня есть список объектных файлов, созданных Makefile, который хранится в директории скажем mylib. Я пытаюсь связать эти объектные файлы во время компиляции одного из подкаталогов в моем проекте (я не хочу создавать исполняемый файл). Вот мой CMakeLists.txt файл

cmake_minimum_required(VERSION 3.5.1)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED on)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -g")
set( CMAKE_EXPORT_COMPILE_COMMANDS ON )
file(GLOB SOURCES "*.cpp" ".hpp")

include_directories(mylib)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/mylib)

add_library(slib SHARED ${SOURCES})

То есть каталог mylib содержит файлы .h, .cc и .o, которые я сгенерировал после запуска make в mylib. Когда я пытаюсь скомпилировать это, я получаю ошибку Undefined symbols for architecture x86_64 для mylib функций.

Как связать несколько предварительно скомпилированных объектных файлов, сгенерированных внешним make? Этот вопрос ( о том, как добавить предварительно собранные объектные файлы в исполняемый файл в cmake ) дает способ связать один объектный файл. Как мне сделать это для всех объектных файлов и создать общую библиотеку вместо исполняемого файла?

1 Ответ

0 голосов
/ 29 января 2020

Я предлагаю скомпилировать библиотеку "mylib" с помощью ExternalProject (например, путем прямого вызова gcc), а затем использовать такой код:

add_library (slib SHARED ${SOURCES})
target_link_libraries (slib "mylib")

add_dependencies может быть полезно в некоторых случаях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...