我目前使用的CMake構建一個項目,我有以下問題: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的特點一定的幫助,是不是能夠得到網上其他任何會爲我做詭計的網站。
最好。
請使用代碼按鈕或縮進各代碼行4個空格所以它會正確地格式化源。 – greyfade 2010-06-24 01:44:16