我正在尝试编译只有一个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()'
有没有人见过这样的东西?如果是的话,如何解决?
答案 0 :(得分:22)
在您的可执行文件中,您只需拥有2个主要功能(按SRC_FILES
打印MESSAGE(${SRC_FILES})
)。一个在main.cpp
中,一个在CMakeCXXCompilerId.cpp
中(这是CMake生成的文件,用于测试您的CXX编译器是否正常工作)。 GLOB_RECURSE
可能会找到并将这两个文件添加到SRC_FILES
使用FILE(GLOB ...)很棘手:
我们不建议使用GLOB从源树中收集源文件列表。如果在添加或删除源时没有更改CMakeLists.txt文件,则生成的构建系统无法知道何时要求CMake重新生成。
您应该直接在CMakeLists.txt中列出源文件和头文件