小编Amb*_*r C的帖子

CMake标题识别:

我目前正在使用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的"包含"功能,无法获得任何其他可以帮助我的技巧.

最好.

c++ cmake

3
推荐指数
1
解决办法
4566
查看次数

标签 统计

c++ ×1

cmake ×1