簡體   English   中英

CMake對類的未定義引用

[英]CMake undefined reference to class

我正在嘗試使用CMake編譯項目,但是卻獲得了對我創建的類函數的未定義引用。 如果我手動創建一個Makefile,則一切編譯正常。 但是,當我使用CMake時,出現了undefined reference錯誤。

這是目錄結構:

. ├── build ├── CMakeLists.txt ├── info │ ├── indexer.pdf │ └── search.pdf ├── Makefile ├── sample │ ├── 1 │ │ └── b.txt │ ├── 2 │ │ └── c.txt │ ├── 3 │ │ └── d.txt │ └── a.txt ├── src │ ├── cpp │ │ ├── index.cpp │ │ └── record.cpp │ ├── h │ │ ├── index.h │ │ └── record.h │ └── main.cpp ├── tests │ └── a └── todo.txt

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)

# Project Name
PROJECT(indexer CXX)

# Binary dir
# Built in CMake variables:
    # CMAKE_SOURCE_DIR: the directory where cmake was executed
    # CMAKE_BINARY_DIR: where the output will go 
    # EXECUTABLE_OUTPUT_PATH: common place to put executables if         you don't want it to be CMAKE_BINARY_DIR
    # LIBRARY_OUTPUT_PATH: common place to put libraries if you don't want it to be CMAKE_BINARY_DIR

set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR})

# Add additional compiler flags
# Built-ins:
#   - CMAKE_CXX_FLAGS_DEBUG = -g
#   - CMAKE_CXX_FLAGS_RELEASE = -O3 -NDEBUG
set(CMAKE_CXX_FLAGS "-std=c++0x -Wall")


include_directories("${PROJECT_SOURCE_DIR}/src/h")

# Aggregate the sources
file(GLOB SOURCES "${PROJECT_SOURCE_DIR}/src/cpp")

add_executable(indexer "${PROJECT_SOURCE_DIR}/src/main.cpp" ${SOURCES})``

錯誤:

CMakeFiles/indexer.dir/src/main.cpp.o: In function `parse(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Index*)':
main.cpp:(.text+0x1b5): undefined reference to `Record::Record(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int)'
main.cpp:(.text+0x1ee): undefined reference to `Index::add(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, Record)'
CMakeFiles/indexer.dir/src/main.cpp.o: In function `main':
main.cpp:(.text+0x77d): undefined reference to `Index::Index()'
main.cpp:(.text+0x84b): undefined reference to `Index::print()'
collect2: error: ld returned 1 exit status
CMakeFiles/indexer.dir/build.make:94: recipe for target 'indexer' failed
make[2]: *** [indexer] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/indexer.dir/all' failed
make[1]: *** [CMakeFiles/indexer.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

有人可以告訴我我在做什么錯嗎?

你的問題是線

file(GLOB SOURCES "${PROJECT_SOURCE_DIR}/src/cpp")

這會將SOURCES變量設置為src目錄中名為cpp的文件。 我想你的意思是

file(GLOB SOURCES "${PROJECT_SOURCE_DIR}/src/cpp/*.cpp")

這將捕獲所有以.cpp擴展名結尾的文件,並將它們放入SOURCES變量中。

注意:我認為您不需要將"${PROJECT_SOURCE_DIR}/src/main.cpp"作為參數傳遞給create_executable ,因為您的SOURCES變量應該已經包含main.cpp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM