【发布时间】:2016-02-19 03:34:13
【问题描述】:
我一直在尝试将项目从 VS 迁移到 CMake,但我不确定我的项目结构是否适合简单的迁移:
project/
|- CMakeLists.txt
|- build/
|- (cmake stuff)
|- src/
|- main.cpp
|- tests.cpp // also contains a main()
|- class1.hpp
|- class1.cpp
|- class2.hpp
|- class2.cpp
|- ...
|- included/
| - (external libs)
到目前为止,我的 CMakeLists.txt 尝试是:
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
set(CMAKE_LEGACY_CYGWIN_WIN32 0)
add_executable(webnectar src/main.cpp
src/test.cpp)
enable_testing()
add_test(tests project)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)
include_directories(SYSTEM ${CMAKE_CURRENT_SOURCE_DIR}/included)
但是我在自己的类中出现链接错误。我不明白为什么。
在其他几个 SO 问题中,我看到人们使用文件 GLOB 来包含子文件夹中的所有源,我想这将是一个解决方案。不过,我希望我能理解为什么 include_directories 还不够,以及为什么(如果可以的话)文件 GLOB 是可以的。
另外,使用文件 GLOB 会弄乱我的构建,因为 test.cpp 和 main.cpp 都有一个 main 函数。
虽然它看起来是另一回事(对于不同的问题),但请考虑这个问题更笼统,因为我如何使用 CMake 语法或更合适的文件结构来解决所有这些问题。
【问题讨论】:
-
嗯,那些
class<N>.cpp不应该包含在源代码中吗?关于 glob:有利也有弊,但利弊更多。 -
@user3159253,我认为他们会是,因为 CMake 找到了标题。但是我得到与这些类的链接错误。
undefined reference to "class1 ctor"等等。
标签: cmake