On 05-07-17 22:50, Sean Wayland wrote: > 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) > > > > > > Hello Sean,
Could you try adding a 'project(CATSTMAT)' call right at the top of your CMakeLists.txt? As well as setting a name for the project, this call also enables languages by default. HTH, Micha
signature.asc
Description: OpenPGP digital signature
-- 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