c++ - CMake发现不止一个main函数

标签 c++ boost cmake

我正在尝试编译一个只有一个 main 函数的项目,但是 CMake 找到了更多。

我的 CMakeLists.txt 是这样的:

cmake_minimum_required(VERSION 2.8)
project(my_proj)

include_directories(".")

add_subdirectory(main)
add_subdirectory(resources)

find_package(OpenCV REQUIRED)
find_package(Boost REQUIRED COMPONENTS system regex program_options)
include_directories(${Boost_INCLUDE_DIRS})

file(GLOB_RECURSE SRC_FILES ${PROJECT_SOURCE_DIR}/*.cpp)
file(GLOB_RECURSE HDR_FILES ${PROJECT_SOURCE_DIR}/*.hpp)

add_executable(my_proj ${SRC_FILES} ${HDR_FILES})

target_link_libraries(my_proj ${OpenCV_LIBS})

target_link_libraries(my_proj ${OpenCV_LIBS} 
                  ${Boost_PROGRAM_OPTIONS_LIBRARY} 
                  ${Boost_REGEX_LIBRARY}
                  ${Boost_FILESYSTEM_LIBRARY}
                  ${Boost_SYSTEM_LIBRARY})

我有更多包含 .hpp.cpp 文件的文件夹,这就是为什么我添加了 file(GLOB_RECURSE... 语句以及include_directories(".").

编译所有文件后出现错误:

CMakeFiles/my_proj.dir/CMakeFiles/CompilerIdCXX/CMakeCXXCompilerId.cpp.o: In    function `main':
/media/N/my_proj/build/CMakeFiles/CompilerIdCXX/CMakeCXXCompilerId.cpp:209: multiple definition of `main'
CMakeFiles/my_proj.dir/main.cpp.o:/media/N/my_proj/main.cpp:10: first defined here
CMakeFiles/my_proj.dir/main/solution2/sources/CRunSolution2.cpp.o: In function `boost::filesystem3::path::codecvt()':
/usr/include/boost/filesystem/v3/path.hpp:377: undefined reference to `boost::filesystem3::path::wchar_t_codecvt_facet()'

有人遇到过这样的事情吗?如果是,如何解决?

最佳答案

在您的可执行文件中,您只有 2 个主要函数(通过 MESSAGE(${SRC_FILES}) 打印出 SRC_FILES)。一个在 main.cpp 中,一个在 CMakeCXXCompilerId.cpp 中(这是 CMake 生成的文件,用于测试您的 CXX 编译器是否正常工作)。 GLOB_RECURSE 可能会找到这两个文件并将其添加到 SRC_FILES

使用 FILE(GLOB ...)很棘手:

We do not recommend using GLOB to collect a list of source files from your source tree. If no CMakeLists.txt file changes when a source is added or removed then the generated build system cannot know when to ask CMake to regenerate.

您应该直接在 CMakeLists.txt 中列出您的源文件和头文件

关于c++ - CMake发现不止一个main函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22176957/

相关文章:

c++ - 如何使用二进制搜索返回姓氏(给定字符串)的第一个索引/出现?

时间:2019-03-17 标签:c++STLmin_element

C++ Boost.Test - 应该在哪里创建类对象来测试它的方法?

c++ - 如何使用 cmake 管理多个构建目标配置

c++ - 内存分配/释放错误(极小代码)

c++ - 为 vector 的 vector 提供平坦迭代器的优雅方式

c++ - 为什么我可以像标量矩阵一样初始化常规的 Boost 矩阵?

linux - 我怎样才能让 CMake 找到我的替代 Boost 安装?

c++ - std::experimental::与ndk/clang一起使用

c++ - 在命令中运行 cmake 'make' 不起作用