Ответ 1
Сценарии FindXXX
должны установить переменную <Packagename>_FOUND
в TRUE
, если пакет был найден. Таким образом, в вашем случае он установит Boost_FOUND
, если boost был найден.
При компиляции вашего Boost.cxx
, я предполагаю, что вам понадобятся заголовки Boost, поэтому вы также должны настроить каталоги включений. *
найдите Boost перед созданием исполняемого файла. Furhtermore, перед добавлением исполняемого файла вам нужно установить свои каталоги include.
IF(UNIX)
find_package(Boost COMPONENTS system filesystem REQUIRED)
# IF( Boost_FOUND ) # checking this variable isnt even necessary, since you added
# REQUIRED to your call to FIND_PACKAGE
SET( BOOST_SRC_FILES boost.cxx )
INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} ) # you could move this down as well
# as ${Boost_INCLUDE_DIRS} will be
# empty if Boost was not found
# ENDIF()
ENDIF()
add_executable (complex complex.cxx lexer.cxx ${BOOST_SRC_FILES} ../../src/lili.cxx ../../src/lilu.cxx)
# Make sure the compiler can find all include files
include_directories (../../src)
include_directories (.)
# INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIRS} ) # alternative location to
# add include dirs, see above
# Make sure the linker can find all needed libraries
# rt: clock_gettime()
target_link_libraries(complex rt)
# Install example application
install (TARGETS complex
RUNTIME DESTINATION bin)
IF(UNIX)
## Compiler flags
if(CMAKE_COMPILER_IS_GNUCXX)
set(CMAKE_CXX_FLAGS "-O2")
set(CMAKE_EXE_LINKER_FLAGS "-lsqlite3 -lrt -lpthread")
endif()
target_link_libraries(complex
${Boost_FILESYSTEM_LIBRARY}
${Boost_SYSTEM_LIBRARY}
#${PROTOBUF_LIBRARY}
)
ENDIF(UNIX)
Afternote: поскольку вы используете флаг REQUIRED
при поиске Boost (так как вам это нужно только на платформе Unix), достаточно даже использовать тэг опционально-source-files-in-a-variable.
(*) Благодаря вашему вопросу, я только выяснил, что не имеет значения, вызывается ли include_directories(...)
до или после создания цели с помощью ADD_EXECUTABLE
или ADD_LIBRARY
, поскольку каталоги добавляются ко всем целям в тот же проект.