【发布时间】:2010-06-24 01:25:53
【问题描述】:
我目前正在使用CMake构建项目,遇到以下问题:
我有一个库,比如“C”,可执行“L”的文件需要使用(L 中的文件调用 C 中库的标头)
库和可执行文件都必须在同一个项目中构建,尽管它们都可以通过 CMake,但 L 中的文件似乎看不到库 C 提供的标头。我不得不在头文件中指定到确切目标的相对路径,这一点都不好,因为某些文件层次结构可能会在某个时间点发生变化。
我不确定使用什么类型的命令来使 L 文件能够直接看到 C 标头,所以我可以说类似
#include "display.h"
直接在 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})
对于可执行文件 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 的“包含”功能,但无法在线获得任何其他对我有用的东西。
最好的。
【问题讨论】:
-
请使用代码按钮或将每个代码行缩进 4 个空格,以便正确格式化您的源代码。