我目前正在使用CMake构建项目,我有以下问题:
我有一个库,比如'C',可执行文件'L'的文件需要使用(L中的文件调用C中库的头文件)
库和可执行文件都必须在同一个项目中构建,虽然它们都经过了CMake,L中的文件似乎看不到库C提供的头文件.我必须指定相对路径到头文件中的确切目标,这一点都不好,因为某些文件层次结构可能会在某个时间点发生变化.
我不确定使用什么类型的命令来使L文件直接能够看到C头,这样我就可以这样说
#include "display.h"
Run Code Online (Sandbox Code Playgroud)
直接在L.我不想在整个地方复制标题,因为我有很多像L这样的文件.
我的Cmake文件如下所示:
对于库C(更接近文件夹层次结构的顶部):
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})
Run Code Online (Sandbox Code Playgroud)
对于可执行文件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)
Run Code Online (Sandbox Code Playgroud)
请注意,这些文件并不能完全完成这项工作 - 我需要一些帮助来确定CMake的"包含"功能,无法获得任何其他可以帮助我的技巧.
最好.