Как получить библиотеку STATI C по умолчанию для CMake - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть проект, интегрированный со сторонним проектом. Один из них использовать

add_library(json 
  dist/jsoncpp.cpp
  dist/json/json.h
  dist/json/json-forwards.h)

нет STATIC или SHARED используется. Когда я собираю ее не как стороннюю библиотеку, а собираю ее напрямую, она создает библиотеку stati c. Но когда я интегрировал его как сторонний, он создаст общую библиотеку. Это приведет к ошибке вроде:

Linking CXX shared library ThirdParty\ozz-animation\src\animation\offline\tools\json\json_d.dll
LINK : fatal error LNK1104: can't open the file “ThirdParty\ozz-animation\src\animation\offline\tools\json\json_d.lib”

Я знаю, добавление STATIC к add_library() решит проблему. Но я использую git подмодуль для управления им. Я не хочу разветвлять проект и синхронизировать c каждый раз.

Можно ли сделать так, чтобы это была библиотека stati c в верхнем слое CMakeLists.txt?

1 Ответ

1 голос
/ 23 апреля 2020

Все, что вам нужно сделать, это добавить переменную BUILD_SHARED_LIBS (, прочитайте об этом в официальной документации CMake ) к вашему вызову CMake, установив ее на FALSE, 0 или OFF .

Итак, если ваш файл CMakeLists.txt находится в родительском каталоге, вам нужно вызвать CMake с помощью:

cmake -DBUILD_SHARED_LIBS=OFF ..

Вы можете принудительно вызвать его из вашего CMakeLists.txt, но я бы не советовал вам этого делать, поскольку он может вызвать проблемы, если ваши файлы CMake toolchain ожидают чего-то другого.

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