C++ CMake查找多个主函数

C++ CMake查找多个主函数,c++,boost,cmake,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 COMP

我正在尝试编译一个只有一个
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
文件的文件夹,这就是为什么我添加了
文件(GLOB\u RECURSE…
语句以及
包含目录(“.”

在它编译了所有文件后,我收到一个错误,上面写着:

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()'

有人遇到过类似的情况吗?如果是,如何修复它?

在可执行文件中,您只需通过
消息(${SRC_FILES})
打印出
SRC_文件
)。一个在
main.cpp
中,另一个在
cmakxcompilerid.cpp
(这是CMake生成的一个文件,用于测试您的CXX编译器是否正常工作。)
GLOB\u RECURSE
可能会找到这两个文件并将其添加到
SRC\u文件中

使用是很棘手的:

我们不建议使用GLOB从源代码树中收集源文件列表。如果在添加或删除源时没有更改CMakeLists.txt文件,则生成的生成系统无法知道何时要求CMake重新生成


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

+1“在CMakeLists.txt中直接列出你的源文件和头文件”如果你的文件在源代码管理中,你可以创建一个脚本来获取源代码管理中的所有cpp/h文件并将它们添加到你的应用程序中。我个人是为我的项目这样做的由CMake编写。您应该在构建项目时使用一个单独的二进制目录。然后您应该能够安全地在源目录上使用globbing。@蒙月的黑暗面:如果您正在考虑学习它的方法,恐怕没有关于它的文章。不过,我可以与您共享代码的相关部分。下面是我如何在我的Git存储库上工作以更新CMake文件(免责声明-部分脚本可能丢失。但希望你能理解):@JohannesS。谢谢,但是在经常进行重构的项目中,使用globbing是一种方式,手动编辑数百个目标是非常繁琐的