I am attempting to write a cmakelists.txt file for an application. The application has a couple of dependencies. I have been able to build targets for the dependencies but when I try and add an executable for the main application I encounter this error.
Undefined symbols for architecture x86_64: "_main", referenced from: implicit entry/start for main executable ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) Googling the error and looking on stack exchange suggests that I don't have a main function in the implicit entry/start . Where does it look for this function ? Does that file need to be first in the list of sources ? This function is included here : ${CATSMAT_DIR}/Application/CATSMAT_main.cpp My cmake file is below. Any advice would be appreciated I have been stuck here for a while! Best Sean ####################################### # CMAKE CATSTMAT ####################################### cmake_minimum_required(VERSION 3.6.3) set(CMAKE_CXX_STANDARD 14) if(CMAKE_CONFIGURATION_TYPES) set(CMAKE_CONFIGURATION_TYPES Debug Release) endif() if(UNIX) add_definitions(-Wall -DGCC) endif(UNIX) ##### RPATH SETTING ##### set(CMAKE_MACOSX_RPATH 1) #if(APPLE) # set (CMAKE_OSX_ARCHITECTURES "x86_64 i386") # if (${CMAKE_SYSTEM_VERSION} VERSION_LESS 9.0.0) # set (CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.4u.sdk) # elseif (${CMAKE_SYSTEM_VERSION} VERSION_LESS 10.8.0) # set (CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.5.sdk) # elseif (${XCODE_VERSION} VERSION_LESS 4.0.0) # set (CMAKE_OSX_SYSROOT /Developer/SDKs/MacOSX10.6.sdk) # else () # set (CMAKE_OSX_SYSROOT "macosx10.7") # endif () # set (CMAKE_C++_FLAGS -mmacosx-version-min=10.4) #endif(APPLE) # #if(WIN32) # add_definitions(-DWINVER=0x0400 -DWIN32) # if(${CMAKE_GENERATOR} STREQUAL "Visual Studio 6") # add_definitions(-DVC6) # elseif(${CMAKE_GENERATOR} STREQUAL "Visual Studio 8 2005") # add_definitions(-DVC2005) # endif(${CMAKE_GENERATOR} STREQUAL "Visual Studio 6") #endif(WIN32) ############### BOOST LIBRARIES ########### if (APPLE) set(BOOST_ROOT "/usr/local/boost") set(BOOST_FILESYSTEM_LIB /usr/local/boost/lib/libboost_filesystem.dylib) set(BOOST_SYSTEM_LIB /usr/local/boost/lib/libboost_system.dylib) else (NOT APPLE) set(BOOST_ROOT "C:/local/boost_1_58_0") set(BOOST_FILESYSTEM_LIB C:/local/boost_1_58_0/lib64-msvc-12.0) set(BOOST_SYSTEM_LIB C:/local/boost_1_58_0/lib64-msvc-12.0) endif (APPLE) FIND_PACKAGE( Boost 1.58.0 REQUIRED ) INCLUDE_DIRECTORIES( ${Boost_INCLUDE_DIR} ) ####################################### # set directories, src and headers. set (CATSMAT_DIR /Users/seanwayland/Desktop/CATSMAT-master/catsmat/catsmat ) set (libIMUSANT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../libIMUSANT) set (LOKI_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../Loki) set (SUFFIX_TREE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../SuffixTree) set (GOOGLE_TEST_INC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../googletest-master/googletest/include) set (IMUSANT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../libIMUSANT) set (LIBMUSICXML_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../libMusicXMLv3) #### SET SOURCES EXPLICITLY ##### set(SRC ${CATSMAT_DIR}/Analysis/src/IMUSANT_contour_suffixtree_builder.cpp ${CATSMAT_DIR}/Analysis/src/IMUSANT_generalised_interval_suffixtree_builder.cpp ${CATSMAT_DIR}/Analysis/src/IMUSANT_interval_suffixtree_builder.cpp ${CATSMAT_DIR}/Analysis/src/IMUSANT_pitch_suffixtree_builder.cpp ${CATSMAT_DIR}/Analysis/src/IMUSANT_repeated_interval_substring.cpp ${CATSMAT_DIR}/Analysis/src/IMUSANT_t_repeated_substring.cpp ${CATSMAT_DIR}/Analysis/src/IMUSANT_VectorMapAnalysisTypes.cpp ${CATSMAT_DIR}/Application/CATSMAT_main.cpp ${CATSMAT_DIR}/Application/CATSMAT_menu.cpp ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_chord.cpp ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_collectionvisitor.cpp ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_cp_matrix.cpp ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_dyad_sequences.cpp ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_dyadtuple_sequences.cpp ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_sonority_sequences.cpp ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_TrigramSequences.cpp ${CATSMAT_DIR}/CounterpointAnalysis/src/CATSMAT_TrigramSuffixTreeBuilder.cpp ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_canonic_techniques_tools.cpp ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_partdata.cpp ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_processing.cpp ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_score_profile.tpp ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_score_splitter.cpp ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_score_profile_special.cpp ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_scoredata.cpp ${CATSMAT_DIR}/GeneralAnalysis/src/CATSMAT_scoredatacollector.cpp ${CATSMAT_DIR}/Segmentation/IMUSANT_segment.cpp ${CATSMAT_DIR}/Segmentation/IMUSANT_set_of_segment.cpp ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/IMUSANT_fixed_period_segmenter.cpp ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/IMUSANT_partlist_ordered_by_part_entry.cpp ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/IMUSANT_segmented_part_fixed_period.cpp ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src/SegmentedScoreFixedPeriod.cpp ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_interval_profile_LBDM.cpp ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_LBDM_segmenter.cpp ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_segmented_note_vectors.cpp ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_segmented_part_LBDM.cpp ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_segmented_profile_vectors.cpp ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src/IMUSANT_weighted_strength_vectors.cpp ) # old version of adding source code #set (SRCFOLDERS # ${CATSMAT_DIR}/Analysis/src # ${CATSMAT_DIR}/CounterpointAnalysis/src # ${CATSMAT_DIR}/GeneralAnalysis/src # ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/src # ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src # ${CATSMAT_DIR}/Application # ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/src # ${CATSMAT_DIR}/Segmentation # ${CATSMAT_DIR}/Utilities #) set (INCFOLDERS ${libIMUSANT_DIR} ${CATSMAT_DIR}/Analysis/inc ${CATSMAT_DIR}/Application ${CATSMAT_DIR}/CounterpointAnalysis/inc ${CATSMAT_DIR}/GeneralAnalysis/inc ${CATSMAT_DIR}/Segmentation ${CATSMAT_DIR}/Segmentation/FixedPeriodDetection/inc ${CATSMAT_DIR}/Segmentation/LocalBoundaryDetectionModel/inc ${CATSMAT_DIR}/Utilities ${libIMUSANT_DIR}/DomainObjects/inc ${libIMUSANT_DIR}/Utilities/inc ${libIMUSANT_DIR}/FileProcessing/inc ${libIMUSANT_DIR}/Converters/MusicXML_v3 ${libIMUSANT_DIR}/Converters/MusicXML_v3/inc ${libIMUSANT_DIR}/Converters/MusicXML_v3/shared/inc ${IMUSANT_DIR}/DomainObjects/inc ${IMUSANT_DIR}/Converters/MusicXML_v3 ${IMUSANT_DIR}/Converters/MusicXML_v3/inc ${IMUSANT_DIR}/Converters/Shared/inc ${IMUSANT_DIR}/FileProcessing/inc ${IMUSANT_DIR}/FileProcessing/Analysis/Segmentation/FixedPeriodDetection/ ${IMUSANT_DIR}/Utilities/inc ${SUFFIXTREE_DIR} ${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src ${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src/lib ${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src/visitors ${LIBMUSICXML_DIR}/libmusicxml-3.00-src/src/parser ${LOKI_DIR} ${SUFFIX_TREE_DIR} ${GOOGLE_TEST_INC_DIR} ) #foreach(folder ${SRCFOLDERS}) # set(SRC ${SRC} "${folder}/*.cpp") # add source files #endforeach(folder) #file (GLOB CORESRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${SRC}) ## is this necessary I think target link directories might do the job ? foreach(folder ${INCFOLDERS}) set(HEADERS ${HEADERS} "${folder}/*.h") # add header files set(INCL ${INCL} "${folder}") # add include folders endforeach(folder) file (GLOB COREH RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${HEADERS}) ####################################### # set includes ( is this needed ? ) include_directories( ${INCFOLDERS}) set_source_files_properties (${COREH} PROPERTIES HEADER_FILE_ONLY TRUE) ####################################### # set library target #if(APPLE OR MSVC) set(target catsmat) # I don't know why these if statements are included they seem to do nothing ' #else(APPLE OR MSVC) # set(target catsmat) #endif(APPLE OR MSVC) ##if(MSVC) ## enable_language(RC) ## set(LIBCONTENT ${CORESRC} ${COREH} ${CATSMAT_DIR}/win32/libIMUSANT/libIMUSANT.rc) ##else(MSVC) ## set(LIBCONTENT ${CORESRC} ${COREH}) ##endif(MSVC) add_executable(${target} ${SRC} ) #### add include directories include_directories ( ${INCFOLDERS} ) ############### Targeted Libraries ########### TARGET_LINK_LIBRARIES(${target} gtest) TARGET_LINK_LIBRARIES(${target} ${BOOST_FILESYSTEM_LIB}) TARGET_LINK_LIBRARIES(${target} ${BOOST_SYSTEM_LIB}) TARGET_LINK_LIBRARIES(${target} libmusicxml2) TARGET_LINK_LIBRARIES(${target} libIMUSANT) set_target_properties (${target} PROPERTIES FRAMEWORK TRUE VERSION ${VERSION} C_STANDARD 99 FRAMEWORK_VERSION ${VERSION} PUBLIC_HEADER "${COREH}" DEFINE_SYMBOL LIBMUSICXML_EXPORTS MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${STRVERS} MACOSX_FRAMEWORK_BUNDLE_VERSION ${SSTRVERS} ) ####################################### # install setup if(NOT APPLE) install ( TARGETS ${target} ${TOOLS} RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib FRAMEWORK DESTINATION "/Library/Frameworks" CONFIGURATIONS Release PUBLIC_HEADER DESTINATION include/libmusicxml ) endif(NOT APPLE) -- www.seanwayland.com Sean Wayland -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: http://public.kitware.com/mailman/listinfo/cmake