[CMake] Help cmake First project

Hendrik Sattler post at hendrik-sattler.de
Tue Aug 5 23:54:23 EDT 2014


Hi,

-lm does not belong to CMAKE_CXX_FLAGS as it is a linker option to link libm.
Use
target_link_libraries(protpred-Gromacs-NSGA2 m)
instead. (Don't search for libm, the linker knows where it is.)

It is also more common to use a variable for the list of source files. That would make it also possible to set the compile language for all files in one command without listing files twice.

Adding headers and not just .c/.cpp/.cxx files makes it easier when using an IDE.


On 5. August 2014 22:13:54 MESZ, Rodrigo Faccioli <rodrigo.faccioli at gmail.com> wrote:
>Hi,
>
>I am thankfull for all help. Now, it is working :-)
>
>Radovan, thank you to try to run and your comments.
>
>My CMakeList.txt is showed below. I would like to know about best
>practice
>to make a CMakeList. If agree, I will compile others executables of my
>project based on how I compiled this executable. In [1] contains my
>full
>project.
>
>cmake_minimum_required(VERSION 2.8)
>
># project Information
>project(2pg_cartesian)
>set(PROJECT_VERSION "1.0")
>
># Set compiler flags
>SET ( CMAKE_CXX_FLAGS "-lm -pedantic")
>
>#Set CXX compiler for all files below
>set_source_files_properties(include/LoadConfig.h PROPERTIES LANGUAGE
>CXX )
>set_source_files_properties(src/protpred-Gromacs-NSGA2.c  PROPERTIES
>LANGUAGE CXX )
>set_source_files_properties(src/LoadConfig.cpp  PROPERTIES LANGUAGE CXX
>)
>set_source_files_properties(src/ea_mono.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/topology.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/pdbio.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/protein.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/futil.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/pdbatom.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/messages.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/topologyio.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/topologylib.c  PROPERTIES LANGUAGE CXX
>)
>set_source_files_properties(src/randomlib.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/vector_math.c  PROPERTIES LANGUAGE CXX
>)
>set_source_files_properties(src/string_owner.c  PROPERTIES LANGUAGE CXX
>)
>set_source_files_properties(src/math_owner.c   PROPERTIES LANGUAGE CXX
>)
>set_source_files_properties(src/osutil.c   PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/load_parameters.c  PROPERTIES LANGUAGE
>CXX )
>set_source_files_properties(src/objective.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/aminoacids.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/aminoacids_io.c  PROPERTIES LANGUAGE
>CXX )
>set_source_files_properties(src/populationio.c  PROPERTIES LANGUAGE CXX
>)
>set_source_files_properties(src/rotation.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/solution.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/gromacs_objectives.c  PROPERTIES
>LANGUAGE
>CXX )
>set_source_files_properties(src/solutionio.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/algorithms.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/ea_nsga2.c  PROPERTIES LANGUAGE CXX )
>set_source_files_properties(src/dominance.c PROPERTIES LANGUAGE CXX )
>
># set include
>include_directories(include)
>
># add libries
>add_library(2PG-NSGA2_lib STATIC
>src/LoadConfig.cpp
>src/ea_mono.c
>src/topology.c
>src/pdbio.c
>src/protein.c
>src/futil.c
>src/pdbatom.c
>src/messages.c
>src/topologyio.c
>src/topologylib.c
>src/randomlib.c
>src/vector_math.c
>src/string_owner.c
>src/math_owner.c
>src/osutil.c
>src/load_parameters.c
>src/objective.c
>src/aminoacids.c
>src/aminoacids_io.c
>src/populationio.c
>src/rotation.c
>src/solution.c
>src/gromacs_objectives.c
>src/solutionio.c
>src/algorithms.c
>src/ea_nsga2.c
>src/dominance.c
>) #end of 2PG-NSGA2_lib
>
># add target
>add_executable(protpred-Gromacs-NSGA2 src/protpred-Gromacs-NSGA2.c)
>target_link_libraries(protpred-Gromacs-NSGA2 2PG-NSGA2_lib)
>
># install
>install(TARGETS protpred-Gromacs-NSGA2 DESTINATION bin)
>
>[1] https://dl.dropboxusercontent.com/u/4270818/2pg_cartesian_cmake.zip
>
>Best regards,
>
>--
>Rodrigo Antonio Faccioli, Ph.D
>Development Software for Structural Bioinformatics
>Barao de Maua University
>University of Sao Paulo
>Lindedin - br.linkedin.com/pub/rodrigo-antonio-faccioli/7/589/a5/
>Curriculum Lattes - http://lattes.cnpq.br/1025157978990218
>
>
>On Tue, Aug 5, 2014 at 3:39 PM, radovan bast <bast at kth.se> wrote:
>
>> dear Rodrigo,
>>
>> i tried it but ran into many other problems in the source, not cmake.
>>
>> but also some cmake suggestions:
>> - list the language(s) that the project uses
>> - the c99 flag is not a definition but a compiler flag, use
>> CMAKE_CXX_FLAGS_... for portability
>> - "ALL" is not a good library name
>> - i recommend to not glob sources but to list them explicitly, there
>are
>> several discussions on the net
>>   which explain why if you search for the topic
>>
>> good luck!
>>   radovan
>>
>>
>> On Tue, Aug 5, 2014 at 5:08 PM, Rodrigo Faccioli <
>> rodrigo.faccioli at gmail.com> wrote:
>>
>>> Hi,
>>>
>>> Thanks Angeliki and Bill for your attentation.
>>>
>>> I have updated my CMakeList.txt based on your post. Below my
>>> CMakeList.txt is showed.
>>>
>>> cmake_minimum_required(VERSION 2.8)
>>> # project Information
>>> project(2pg_cartesian)
>>> set(PROJECT_VERSION "1.0")
>>> # add definitions to compiler
>>> add_definitions(-std=c99)
>>> # get all files under directory src
>>> file(GLOB SRC_FILES "src/*.c")
>>> # set include
>>> include_directories(include)
>>> # added libries
>>> add_library(ALL STATIC ${SRC_FILES})
>>> # add target
>>> add_executable(protpred-Gromacs-NSGA2 src/protpred-Gromacs-NSGA2.c)
>>> target_link_libraries(protpred-Gromacs-NSGA2 ALL)
>>>
>>> Unfortunatelly, I have received error messages as cited below:
>>> faccioli at faccioli:~/Downloads/2pg_cartesian/build$ make
>>> Scanning dependencies of target ALL
>>> [  2%] Building C object
>CMakeFiles/ALL.dir/src/protpred-Gromacs-NSGA2.c.o
>>> [  5%] Building C object CMakeFiles/ALL.dir/src/ea_mono.c.o
>>> [  7%] Building C object CMakeFiles/ALL.dir/src/topologyio.c.o
>>> [ 10%] Building C object CMakeFiles/ALL.dir/src/aminoacids.c.o
>>> [ 12%] Building C object CMakeFiles/ALL.dir/src/populationio.c.o
>>> [ 15%] Building C object CMakeFiles/ALL.dir/src/osutil.c.o
>>> [ 17%] Building C object CMakeFiles/ALL.dir/src/aminoacids_io.c.o
>>> [ 20%] Building C object
>>>
>CMakeFiles/ALL.dir/src/protpred-Gromacs-Sort_Method_Files_by_Front_Dominance.c.o
>>> [ 23%] Building C object CMakeFiles/ALL.dir/src/pdbio.c.o
>>> [ 25%] Building C object CMakeFiles/ALL.dir/src/solution.c.o
>>> [ 28%] Building C object CMakeFiles/ALL.dir/src/vector_math.c.o
>>> [ 30%] Building C object CMakeFiles/ALL.dir/src/math_owner.c.o
>>> [ 33%] Building C object CMakeFiles/ALL.dir/src/protein.c.o
>>> [ 35%] Building C object CMakeFiles/ALL.dir/src/load_parameters.c.o
>>> In file included from
>>> /home/faccioli/Downloads/2pg_cartesian/src/load_parameters.c:7:0:
>>> /home/faccioli/Downloads/2pg_cartesian/include/LoadConfig.h:1:18:
>fatal
>>> error: string: Arquivo ou diretório não encontrado
>>> compilation terminated.
>>> make[2]: ** [CMakeFiles/ALL.dir/src/load_parameters.c.o] Erro 1
>>> make[1]: ** [CMakeFiles/ALL.dir/all] Erro 2
>>> make: ** [all] Erro 2
>>> faccioli at faccioli:~/Downloads/2pg_cartesian/build$
>>>
>>> I did not understand what mistakes I have done since all files share
>same
>>> structure of directory. In [1] is my project completly. If prefer I
>can
>>> send its github repository.
>>>
>>> I appreciate any help.
>>>
>>> Best regards,
>>>
>>> [1]
>https://dl.dropboxusercontent.com/u/4270818/2pg_cartesian_cmake.zip
>>>
>>>
>>> --
>>> Rodrigo Antonio Faccioli, Ph.D
>>> Development Software for Structural Bioinformatics
>>> Barao de Maua University
>>> University of Sao Paulo
>>> Lindedin - br.linkedin.com/pub/rodrigo-antonio-faccioli/7/589/a5/
>>> Curriculum Lattes - http://lattes.cnpq.br/1025157978990218
>>>
>>>
>>> On Mon, Aug 4, 2014 at 12:54 PM, Bill Hoffman
><bill.hoffman at kitware.com>
>>> wrote:
>>>
>>>> On 8/4/2014 10:26 AM, Rodrigo Faccioli wrote:
>>>>
>>>>> protpred-Gromacs-NSGA2.c:(.text+0x1e): undefined reference to
>>>>> `display_msg'
>>>>> protpred-Gromacs-NSGA2.c:(.text+0x3e): undefined reference to
>>>>> `load_parameters_from_file'
>>>>> protpred-Gromacs-NSGA2.c:(.text+0x58): undefined reference to
>>>>> `ea_nsga2'
>>>>> protpred-Gromacs-NSGA2.c:(.text+0x64): undefined reference to
>>>>> `fatal_error'
>>>>> protpred-Gromacs-NSGA2.c:(.text+0x73): undefined reference to
>>>>> `deAllocateload_parameters'
>>>>> protpred-Gromacs-NSGA2.c:(.text+0x7d): undefined reference to
>>>>> `display_msg'
>>>>>
>>>> You have to find out where these symbols are defined.  If you have
>a
>>>> working Makefile version use nm and grep to find the places.   You
>can also
>>>> grep your source tree.  You are either missing a source file, or a
>-D
>>>> option.
>>>>
>>>> Another approach is to run make VERBOSE=1 and compare the build
>command
>>>> lines to your Makefile build.
>>>>
>>>> -Bill
>>>>
>>>> --
>>>>
>>>> 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
>>>>
>>>
>>>
>>> --
>>>
>>> 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
>>>
>>
>>
>>
>> --
>> # PDC Center for High Performance Computing &
>> # Department of Theoretical Chemistry and Biology
>> # Royal Institute of Technology, Stockholm
>> # +46-8-790-6628
>>
>
>
>------------------------------------------------------------------------



More information about the CMake mailing list