Infact是Google研发的一套动态创建对象的C++库。其社区版本仅提供了基于Make的项目构建。而目前大多数开源系统均使用CMake作为跨平台的项目构建工具。
因此,本文提供了Infact CMake构建的方法。
一、下载源码
git clone https://github.com/google/infact.git
git checkout -b v1.0.8 v1.0.8
二、CMake配置
在src/infact目录下,新建CMakeLists.txt文件,添加以下内容,
SET(LIB_NAME Infact)
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_BINARY_DIR}
)
LINK_DIRECTORIES(
${CMAKE_LIBRARY_PATH}
${PROJECT_BINARY_DIR}/lib
)
SET(Infact_LIBS
)
# Headers
SET(Infact_HDRS
environment.h
environment-impl.h
error.h
factory.h
interpreter.h
stream-init.h
stream-tokenizer.h
)
SET(Infact_SRCS
environment.cc
environment-impl.cc
error.cc
factory.cc
interpreter.cc
stream-tokenizer.cc
)
IF (MSVC)
# Turn off deprecation warnings
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS)
ADD_DEFINITIONS(-D_CRT_NONSTDC_NO_WARNINGS)
ENDIF(MSVC)
ADD_LIBRARY(${LIB_NAME} STATIC ${Infact_HDRS} ${Infact_SRCS})
TARGET_LINK_LIBRARIES(${LIB_NAME} ${Infact_LIBS})
SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES DEBUG_POSTFIX "d")
# Install
SET(INSTALL_INCDIR include)
SET(INSTALL_BINDIR bin)
IF(WIN32)
SET(INSTALL_LIBDIR bin)
SET(INSTALL_ARCHIVEDIR lib)
ELSE(WIN32)
SET(INSTALL_LIBDIR lib${LIB_POSTFIX})
SET(INSTALL_ARCHIVEDIR lib${LIB_POSTFIX})
ENDIF(WIN32)
INSTALL(
TARGETS ${LIB_NAME}
RUNTIME DESTINATION ${INSTALL_BINDIR}
LIBRARY DESTINATION ${INSTALL_LIBDIR}
ARCHIVE DESTINATION ${INSTALL_ARCHIVEDIR}
)
INSTALL(
FILES ${HEADERS}
DESTINATION ${INSTALL_INCDIR}/${LIB_NAME}
)
使用CMake进行项目构建,然后利用VS完成编译即可。