CMake:未定义的函数引用

时间:2012-10-17 08:26:54

标签: c++ c compilation

我有以下目录结构:

   ├── build (empty dir)
   ├── CMakeLists.txt
   ├── easylogging++.h
   ├── help.h
   ├── operation.h
   ├── operation_list.h
   ├── operations
   │   ├── CMakeLists.txt
   │   ├── matchcount.cc
   │   └── matchcount.h
   └── ops_toolkit.cc

我是CMake的新手,并尝试编写CMakeLists.txt。 我的matchcount.h有一个签名,其实现在matchcount.cc中(作为典型的C / C ++结构)。 以下是我在基本目录中的CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
project(ops_toolkit)

add_subdirectory(operations)

add_executable(ops_toolkit ops_toolkit.cc)
set(CMAKE_CXX_FLAGS "-std=c++0x")

以下是操作目录

中的一个
include_directories(${ops_toolkit_SOURCE_DIR}/operations)
link_directories(${ops_toolkit_BINARY_DIR}/operations)
set(all_operations_HEADER operations/matchcount.h)
set(all_operations_SOURCES operations/matchcount.cc)

我正在获取名为int matchcount(int, const char**)的函数签名的未定义引用,并在

之后进行投诉
dev:~/work/ops_toolkit/build$ make
Scanning dependencies of target ops_toolkit
[100%] Building CXX object CMakeFiles/ops_toolkit.dir/ops_toolkit.cc.o
Linking CXX executable ops_toolkit
CMakeFiles/ops_toolkit.dir/ops_toolkit.cc.o: In function `__static_initialization_and_destruction_0(int, int)':
ops_toolkit.cc:(.text+0x249): undefined reference to `operations::matchcount(int, char const**)'
collect2: ld returned 1 exit status
make[2]: *** [ops_toolkit] Error 1
make[1]: *** [CMakeFiles/ops_toolkit.dir/all] Error 2
make: *** [all] Error 2

有人可以帮我吗? 感谢

1 个答案:

答案 0 :(得分:0)

问题来自add_subdirectory及其关联的CMakeLists.txt(./operations中的那个),这是不正确的,请参阅this SO question for the implications of the add_subdirectory command

为了清楚起见,我还建议您将include_directorieslink_directories放入主CMake文件中。