[CMake] Help cmake First project

Rodrigo Faccioli rodrigo.faccioli at gmail.com
Mon Aug 11 16:01:40 EDT 2014


Hi,

Angeliki, thanks your comments.

I used properties because my old makefile was written to use g++ despite my
files have suffix .c. I understood that cmake tried to compile my files
using gcc instead of g++.

I removed my set compiler flags. Moreover, I have finished to compile all
programs of my project using cmake. My newer CMakeLists.txt is below and
works fine. Now I will try to compile my project for Visual Studio 10. Any
tips for this new work, I am thankful.

cmake_minimum_required(VERSION 2.8)

# project Information
project(2pg_cartesian)
set(PROJECT_VERSION "1.0")


#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/protpred-Gromacs-Dominance.c  PROPERTIES
LANGUAGE CXX )
set_source_files_properties(src/protpred-Gromacs-Front.c  PROPERTIES
LANGUAGE CXX )
set_source_files_properties(src/protpred-Gromacs-MC_Metropolis.c
 PROPERTIES LANGUAGE CXX )
set_source_files_properties(src/protpred-Gromacs-Mono.c  PROPERTIES
LANGUAGE CXX )
set_source_files_properties(src/protpred-Gromacs-Random_Algorithm.c
 PROPERTIES LANGUAGE CXX )
set_source_files_properties(src/protpred-Gromacs-Sort_Method_Files_by_Front_Dominance.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_source_files_properties(src/owner_file_analysis.c PROPERTIES LANGUAGE
CXX )
set_source_files_properties(src/mc_metropolis.c PROPERTIES LANGUAGE CXX )
set_source_files_properties(src/random_algorithm.c PROPERTIES LANGUAGE CXX )

# set include
include_directories(include)

# add libries
add_library(2PG_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
src/owner_file_analysis.c
src/mc_metropolis.c
src/random_algorithm.c
) #end of 2PG_lib

# add target
add_executable(protpred-Gromacs-NSGA2 src/protpred-Gromacs-NSGA2.c)
target_link_libraries(protpred-Gromacs-NSGA2 2PG_lib)

add_executable(protpred-Gromacs-Dominance src/protpred-Gromacs-Dominance.c)
target_link_libraries(protpred-Gromacs-Dominance 2PG_lib)

add_executable(protpred-Gromacs-Front src/protpred-Gromacs-Front.c)
target_link_libraries(protpred-Gromacs-Front 2PG_lib)

add_executable(protpred-Gromacs-MC_Metropolis
src/protpred-Gromacs-MC_Metropolis.c)
target_link_libraries(protpred-Gromacs-MC_Metropolis 2PG_lib)

add_executable(protpred-Gromacs-Mono src/protpred-Gromacs-Mono.c)
target_link_libraries(protpred-Gromacs-Mono 2PG_lib)

add_executable(protpred-Gromacs-Random_Algorithm
src/protpred-Gromacs-Random_Algorithm.c)
target_link_libraries(protpred-Gromacs-Random_Algorithm 2PG_lib)

add_executable(protpred-Gromacs-Sort_Method_Files_by_Front_Dominance
src/protpred-Gromacs-Sort_Method_Files_by_Front_Dominance.c)
target_link_libraries(protpred-Gromacs-Sort_Method_Files_by_Front_Dominance
2PG_lib)


# install
install(TARGETS protpred-Gromacs-NSGA2 DESTINATION bin)
install(TARGETS protpred-Gromacs-Dominance DESTINATION bin)
install(TARGETS protpred-Gromacs-Front DESTINATION bin)
install(TARGETS protpred-Gromacs-MC_Metropolis DESTINATION bin)
install(TARGETS protpred-Gromacs-Mono DESTINATION bin)
install(TARGETS protpred-Gromacs-Random_Algorithm DESTINATION bin)
install(TARGETS protpred-Gromacs-Sort_Method_Files_by_Front_Dominance
DESTINATION bin)


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 Wed, Aug 6, 2014 at 5:32 AM, Angeliki Chrysochou <
angeliki.chrysochou at gmail.com> wrote:

> Hi Rodrigo,
>
> Glad that it is working for you now. I just wanted to mention that I never
> had to set the language as properties to the source files since cmake
> detects it from the suffix of the source files you list, or at least I
> never had a case where the language was not properly detected.
>
> Other than that I agree with Hendrik's suggestions as well!
>
> Cheers,
> Angeliki
>
>
>
>
>
>
> On Wed, Aug 6, 2014 at 5:54 AM, Hendrik Sattler <post at hendrik-sattler.de>
> wrote:
>
>> 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
>> >>
>> >
>> >
>> >------------------------------------------------------------------------
>>
>>
>> --
>>
>> 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
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20140811/556c9e8b/attachment-0001.html>


More information about the CMake mailing list