我正在尝试编译一个只有一个 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/