2013-08-12 4 views
3

Я пытаюсь создать свое решение с помощью CMake. Это мой первый раз, и я начал с чего-то простого.CMake - Не удается найти файл

Я сделал текстовый файл (CMakeLists.txt) и использовал его в CMake. Я могу «Настройка» без ошибок, но у меня есть ошибки, когда я пытаюсь создать его:

CMake Error at CMakeLists.txt:75 (ADD_EXECUTABLE): 
    Cannot find source file: 

    ./source/server/server.hpp 

    Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp 
    .hxx .in .txx 

Это путь моих файлов:

\QTCP_Connection\source\server (contain server.cpp and server.hpp) 
\QTCP_Connection\source\qtcp (contain main.cpp) 
\QTCP_Connection\source\libs (contain singleton_holder.hpp and stdafx.hpp and stdafx.cpp and targetver.hpp) 

И это мой CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.6) 
PROJECT(QTCP_Connection) 
FIND_PACKAGE(Qt4 REQUIRED) 

INCLUDE(${QT_USE_FILE}) 
ADD_DEFINITIONS(${QT_DEFINITIONS}) 
ADD_DEFINITIONS(-DUNICODE) 
ADD_DEFINITIONS(-DQT_PLUGIN) 
ADD_DEFINITIONS(-DQT_SHARED) 
ADD_DEFINITIONS(-DQT_DLL) 
ADD_DEFINITIONS(-DQT_LARGEFILE_SUPPORT) 
ADD_DEFINITIONS(-DQT_THREAD_SUPPORT) 

SET(QT_DONT_USE_QTGUI TRUE) 

SET(QTCP_PROJECT_DIR .) 
SET(QTCP_QT_DIR $ENV{SEPANTA_QT_DIR}) 
SET(QTCP_BOOST_DIR $ENV{SEPANTA_BOOST_DIR}) 
SET(QTCP_PYTHON_DIR $ENV{SEPANTA_PYTHON_DIR}) 
SET(QTCP_XFS_DIR $ENV{XFS_DIR}) 
SET(QTCP_LOGGER_DIR $ENV{SEPANTA_LOGGER_DIR}) 

SET(DEVICE_MANAGER_IMPL_DIR device-manager) 
SET(DEVICES_BASE_DIR ../../devices) 
SET(DEVICES_IMPL_DIR devices) 

SET(QTCP_DIR ${QTCP_PROJECT_DIR}/source/qtcp) 
SET(SERVER_DIR ${QTCP_PROJECT_DIR}/source/server) 
SET(LIBS_DIR ${QTCP_PROJECT_DIR}/source/libs) 

INCLUDE_DIRECTORIES(
    ${QTCP_PROJECT_DIR}/source 
    ${QTCP_QT_DIR}/include 
    ${QTCP_QT_DIR}/include/QtCore 
    ${QTCP_BOOST_DIR}/include/boost-1_50 
    ${QTCP_LOGGER_DIR}/include 
    ${QTCP_PYTHON_DIR}/include 
) 

SET(QT_HEADERS 
    ${SERVER_DIR}/server.hpp 
) 

QT4_WRAP_CPP(QT_HEADERS_MOC ${QT_HEADERS} OPTIONS -DBOOST_TT_HAS_OPERATOR_HPP_INCLUDED) 

SET(QTCP_FILES 
    ${QTCP_PROJECT_DIR}/source/qtcp/main.cpp 
) 

SET(SERVER_FILES 
    ${SERVER_DIR}/server.hpp 
    ${SERVER_DIR}/server.cpp 
) 

SET(LIBS_FILES 
    ${LIBS_DIR}/singleton_holder.hpp 
    ${LIBS_DIR}/stdafx.cpp 
    ${LIBS_DIR}/stdafx.hpp 
    ${LIBS_DIR}/targetver.hpp 
) 

LINK_DIRECTORIES(
    ${QTCP_QT_DIR}/lib 
    ${QTCP_BOOST_DIR}/lib 
    ${QTCP_PYTHON_DIR}/libs 
    ${QTCP_LOGGER_DIR}/lib 
    ${QTCP_XFS_DIR}/XFS_WINCOR_4.1 
    ${QTCP_XFS_DIR}/XFS_WINCOR_4.1/LIB) 

SET(XFS_LIBS 
    MSXFS 
    xfs_conf 
    SSIDLL) 

ADD_EXECUTABLE(QTCP_Connection 
    ${QT_HEADERS_MOC} 
    ${QTCP_FILES} 
    ${SERVER_FILES} 
    ${LIBS_FILES} 
) 

source_group("moc_generated" FILES ${QT_HEADERS_MOC}) 

source_group("source\\qtcp" FILES ${QTCP_FILES}) 
source_group("source\\server" FILES ${SERVER_FILES}) 
source_group("source\\libs" FILES ${LIBS_FILES}) 


TARGET_LINK_LIBRARIES(QTCP_Connection 
    #${QT_LIBRARIES} 
    ${QT_QTCORE_LIBRARY} 
    ${QT_QTNETWORK_LIBRARY} 
    ${QT_QTSQL_LIBRARY} 
    ${XFS_LIBS} 
    debug log4cplusUD.lib 
    optimized log4cplusU.lib 
) 

set_target_properties(QTCP_Connection PROPERTIES COMPILE_FLAGS "/W2 /Zc:wchar_t-") 
set_target_properties(QTCP_Connection PROPERTIES LINK_FLAGS "/SUBSYSTEM:WINDOWS /ENTRY:mainCRTStartup") 

Можете ли вы сказать мне, что я здесь делаю неправильно?

ответ

2

Эта линия представляется проблематичным:

SET(QTCP_PROJECT_DIR .) 

Каталог . будет указывать на рабочий каталог процесса работает CMake, а не в каталоге файла CMakeLists.

Вместо этого вы должны использовать что-то вроде

SET(QTCP_PROJECT_DIR ${PROJECT_SOURCE_DIR}) 

Смотрите документацию по PROJECT_SOURCE_DIR переменной для деталей.

Обратите внимание, что вы можете использовать message, чтобы сделать несколько простых PRINTF-отладки, если вы не уверены в том, что определенная переменная указывает:

message("PROJECT_SOURCE_DIR points to " ${PROJECT_SOURCE_DIR}) 
+0

я до сих пор такая же проблема даже с «SET (QTCP_PROJECT_DIR $ {PROJECT_SOURCE_DIR}) ", а также показывает правильный путь. PROJECT_SOURCE_DIR указывает на D:/Source-Code/QTCP_Connection –

+0

Я использовал команду сообщения, чтобы видеть файлы в каталоге cmake can not find, но все еще в порядке. message ("SERVER_FILES указывает на" $ {SERVER_FILES}) ------> SERVER_FILES указывает на D: /Source-Code/QTCP_Connection/source/server/server.hpp D:/Source-Code/QTCP_Connection/source/server /server.cpp –

+0

@MeysamHashemi Можете ли вы попробовать удалить «CMakeCache.txt» в своей папке сборки и запустить ее снова. Кроме того, ошибка, данная CMake, теперь должна выглядеть по-другому. Можете ли вы дать новое сообщение об ошибке? – ComicSansMS

Смежные вопросы