В настоящее время я использую CMake для создания проекта, и у меня возникает следующая проблема:
У меня есть библиотека, скажем 'C', которую необходимо использовать для файлов исполняемого файла 'L' (файлы в L вызывают заголовки из библиотеки в C)
И библиотека, и исполняемый файл должны быть собраны в одном проекте, и хотя они оба проходят через CMake нормально, файлы в L не могуткажется, видят заголовки, предоставляемые библиотекой C. Мне приходится указывать относительные пути к точному месту назначения в заголовочных файлах, что совсем нехорошо, поскольку некоторая иерархия файлов может измениться в какой-то момент времени.
Я не уверен, какой тип команды использовать, чтобы файлы L могли напрямую видеть заголовки C, чтобы я мог сказать что-то вроде
#include "display.h"
непосредственно в L.Я не хочу копировать заголовки повсюду, так как у меня много файлов, таких как L.
Мои файлы Cmake такие, как показано:
Для библиотеки C (которая ближе кверхняя часть папки heirarchy):
FIND_PACKAGE(VTK REQUIRED)
IF(NOT VTK_USE_RENDERING)
MESSAGE(FATAL_ERROR "Example ${PROJECT_NAME} requires VTK_USE_RENDERING.")
ENDIF(NOT VTK_USE_RENDERING)
INCLUDE(${VTK_USE_FILE})
#INCLUDE_DIRECTORIES(${CRANIOLIB_SOURCE_DIR}/include)
SET(cranioDir ${CMAKE_CURRENT_SOURCE_DIR})
SET(SOURCES
twoD.cxx
display.cxx
rotate.cxx
symmetry.cxx
normalize.cxx
real_sym_eigens.cxx
debugLib.cxx
readInputLib.cxx)
SET(cranioLib_INCLUDE_DIRS ${CMAKE_INSTALL_PREFIX}/include)
ADD_LIBRARY(cranioLib ${SOURCES})
и для исполняемого файла L:
FIND_PACKAGE(VTK REQUIRED)
IF(NOT VTK_USE_RENDERING)
MESSAGE(FATAL_ERROR "Example ${PROJECT_NAME} requires VTK_USE_RENDERING.")
ENDIF(NOT VTK_USE_RENDERING)
INCLUDE(${VTK_USE_FILE})
INCLUDE_DIRECTORIES(${cranioDir})
ADD_EXECUTABLE(RotateSS RotateSideToSide.cxx)
TARGET_LINK_LIBRARIES(RotateSS vtkRendering cranioLib vtkHybrid vtkGraphics)
ADD_EXECUTABLE(RotateST RotateSideTwist.cxx)
TARGET_LINK_LIBRARIES(RotateST vtkRendering cranioLib vtkHybrid vtkGraphics)
ADD_EXECUTABLE(RotateUD RotateUpDown.cxx)
TARGET_LINK_LIBRARIES(RotateUD vtkRendering cranioLib vtkHybrid vtkGraphics)
Обратите внимание, что эти файлы не полностью выполняют свою работу - мне нужна некоторая помощь в получении включаемых функций CMake, развене могу получить что-либо еще в Интернете, что бы мне помочь.
Бест.