Cmake создать общий объект

У меня есть три файла:

lib.c lib.h = > Они должны быть созданы как .so файл
client.c = > Это должно быть выполнено как исполняемый файл.

Внутри client.c я включаю файл lib.h, чтобы получить декларации функций, определенных в lib.c

Может ли кто-нибудь сказать мне точный файл CMakeLists, который я должен использовать, чтобы исходная область была незагромождена с временными файлами Cmake и двоичными файлами и библиотеками (DLL в случае, если я полагаю Windows), сгенерированными в отдельных сборках и двоичных каталогах

Ответ 1

Cmake по умолчанию строится на отдельных каталогах (я не тестировал этот пример):

PROJECT(myproject)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

SET(mylibSRCS lib.c)
SET(myprogSRCS client.c)

ADD_LIBRARY(mylib ${mylibSRCS})
ADD_EXECUTABLE(myprog ${myprogSRCS})

TARGET_LINK_LIBRARIES(myprog mylib)

Ты сделаешь:

mkdir build
cd build
cmake ..
make

Все будет строиться.

Обновление: как упомянуто @chryss ниже, если вы хотите, чтобы генерировался файл .so, команда должна быть:

ADD_LIBRARY(mylib SHARED ${mylibSRCS})

Ответ 2

Это решение не создаст файл .so, а эквивалент cmake для дальнейшего включения в cmake.
Я ищу решение, которое обеспечит эквивалент этого:

g++ -shared -Wl,-soname,plugin_lib.so.1 -o plugin_lib.so plugin_lib.o

Будет создано plugin_lib.so, которое может быть загружено динамически с помощью dlopen во время выполнения.

В решении отсутствует опция "SHARED", например:

ADD_LIBRARY(mylib SHARED ${mylibSRCS})