2015-06-25 3 views
2

со следующей структурой проектаCMake строить подкаталоги библиотеки в качестве статических

CMakeLists.txt 
libs\CMakeLists.txt 

У меня есть следующий случай использования: CMakeLists.txt описывает процесс сборки библиотеки MyLib. В файле libs \ CMakeLists.txt описывается процесс сборки библиотек, используемых MyLib. Он используется главным проектом с помощью add_subdirectory().

я могу контролировать, если MyLib будет общей или статической библиотеки с:

cmake -DBUILD_SHARED=TRUE|FALSE 

Все ЛИЭС используемые MyLib должны быть связаны статически (MyLib должен быть «автономным» библиотека). Но я не хочу, чтобы сделать их статическими явно в LIBS \ CMakeLists.txt

using add_library(... STATIC ...) 

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

Могу ли я контролировать, как будет создан мой add_subdirectory (проект)?

ответ

4

Вы можете использовать опцию:

option(MYLIB_BUILD_STATIC "Build libraries as static libraries" ON) 

# add/create library 
if (MYLIB_BUILD_STATIC) 
    add_definitions(-DMYLIB_STATIC_BUILD) 
    add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES}) 
else (MYLIB_BUILD_STATIC) 
    add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES}) 
endif (MYLIB_BUILD_STATIC) 
+0

Это правильно. Кроме того, вы можете решить эту проблему, не вводя новую переменную, изменяя и восстанавливая BUILD_SHARED_LIBS на лету. –

Смежные вопросы