Можно ли заставить CMake собрать как статическую, так и совместно используемую версию одной и той же библиотеки?

Когда вы определяете литеральное целое число с префиксом 0, компилятор будет рассматривать его как целочисленную базу 8. (Octal).

Проверьте этот пост http: // rodrigosasaki. com / 2013/06/10 / number-literals-in-java /

Итак, значение 77 в восьмеричной базе фактически равно 63 в десятичной базе.

125
задан gct 28 January 2010 в 03:20
поделиться

1 ответ

Да, это умеренно просто. Просто используйте две команды "add_library":

add_library(MyLib SHARED source1.c source2.c)
add_library(MyLibStatic STATIC source1.c source2.c)

Даже если у вас много исходников, вы поместите список исходников в переменную cmake, так что это все равно легко сделать.

В Windows вы, вероятно, должны дать каждой библиотеке свое имя, так как есть ".lib" файл как для общего доступа, так и для статического. Но в Linux и Mac вы даже можете дать обеим библиотекам одинаковое имя (например, libMyLib.a и libMyLib.so):

set_target_properties(MyLibStatic PROPERTIES OUTPUT_NAME MyLib)

Но я не рекомендую давать одинаковое имя как статической, так и динамической версиям библиотеки. Я предпочитаю использовать разные имена, так как это облегчает выбор статического и динамического связывания на линии компиляции для инструментов, которые связываются с библиотекой. Обычно я выбираю такие имена как libMyLib.so (shared) и libMyLib_static.a (static). (Это будут имена на linux.)

.
117
ответ дан 24 November 2019 в 01:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: