Когда вы определяете литеральное целое число с префиксом 0, компилятор будет рассматривать его как целочисленную базу 8. (Octal).
Проверьте этот пост http: // rodrigosasaki. com / 2013/06/10 / number-literals-in-java /
Итак, значение 77 в восьмеричной базе фактически равно 63 в десятичной базе.
Да, это умеренно просто. Просто используйте две команды "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.)