В нашей системе сборки все сторонние библиотеки компилируются вместе с проектом, поэтому стандартное FIND_PACKAGE нам не подходит. Значит, CMakeLists.txt из сборки OgreBullet тоже идет лесом. Поэтому приходится извращаться на свой лад.
CMakeLists.txt
# Название проекта project( OgreBullet ) # Разделяем исходники для двух precompiled headers file( GLOB_RECURSE OGRE_BULLET_COLLISIONS Collisions/*.cpp ) file( GLOB_RECURSE OGRE_BULLET_DYNAMICS Dynamics/*.cpp ) # Папки для поиска #include include_directories( ${GLOBAL_INCLUDE_DIR}/Ogre ${GLOBAL_INCLUDE_DIR}/OgreBullet/Collisions ${GLOBAL_INCLUDE_DIR}/OgreBullet/Dynamics ${GLOBAL_LIB_DIR}/Bullet ${GLOBAL_LIB_DIR}/Bullet/BulletConvexDecomposition ${GLOBAL_LIB_DIR}/Bullet ) # Определяем макрос для использования precompiled headers macro(use_precompiled_header SRC_LIST HDR_FILE SRC_FILE) # Выделяем имя заголовка без пути get_filename_component(PCH_HEADER ${HDR_FILE} NAME) # Выделям имя заголовка без расширения и пути get_filename_component(PCH_BINARY ${HDR_FILE} NAME_WE) # Полный путь к созданному pch set(PCH_BINARY "${CMAKE_CURRENT_BINARY_DIR}/${PCH_BINARY}.pch") if (MSVC) # Для precompiled.cpp создаем pch, указывая файл (OBJECT_OUTPUTS), который создается в результате комманды set_source_files_properties( ${SRC_FILE} PROPERTIES COMPILE_FLAGS "/Yc${PCH_HEADER} /Fp${PCH_BINARY}" OBJECT_OUTPUTS "${PCH_BINARY}" ) # Для каждого исходника в списке, задаем зависимость от precompiled.pch и указываем использовать его параметром "/Yu" foreach( SOURCE ${SRC_LIST} ) set_source_files_properties( ${SOURCE} PROPERTIES COMPILE_FLAGS "/Yu${PCH_HEADER}" OBJECT_DEPENDS "${PCH_BINARY}" ) endforeach( SOURCE ${SRC_LIST} ) endif(MSVC) endmacro(use_precompiled_header) # Создаем precompiled header для Collisions use_precompiled_header( OGRE_BULLET_COLLISIONS "${GLOBAL_INCLUDE_DIR}/OgreBullet/Collisions/OgreBulletCollisions.h" Collisions/OgreBulletCollisionsPrecompiled.cpp ) # Создаем precompiled header для Dynamics use_precompiled_header( OGRE_BULLET_DYNAMICS "${GLOBAL_INCLUDE_DIR}/OgreBullet/Dynamics/OgreBulletDynamics.h" Dynamics/OgreBulletDynamicsPrecompiled.cpp ) # Объединим два списка файлов для удобства set( OGRE_BULLET_SRC "${OGRE_BULLET_COLLISIONS}" "${OGRE_BULLET_DYNAMICS}" ) # Добавляем define для использования precompiled headers библиотекой OgreBullet add_definitions( -D_PRECOMP ) # Profit! add_library( ogre_bullet STATIC ${OGRE_BULLET_SRC} ) |
UPDATE: Окончательный вариант precompiled headers смотрим здесь.