Компиляция нескольких исходных каталогов с помощью g ++ - PullRequest
5 голосов
/ 24 марта 2012

Мой проект c ++ имеет следующую структуру

src
|
|source1.cpp
|source2.cpp
|
|<srcfolder1>
|__ source11.cpp
|__ source12.cpp
|
|<srcfolder2>
|__ source21.cpp
|__ source22.cpp

Как видно, существует несколько папок с несколькими исходными файлами.Какую команду я даю g ++ для компиляции всего исходного файла в один файл .o?

Ответы [ 4 ]

5 голосов
/ 24 марта 2012

Если у вас много исходных файлов, вам действительно стоит написать Makefile: http://mrbook.org/tutorials/make/

Например, вы можете использовать синтаксис, подобный этому, для компиляции нескольких файлов (в Makefile):

%.o : $(SRC_FOLDER)/%.cpp
  $(CXX) -c -o $@ $<
2 голосов
/ 24 марта 2012

Вы также можете использовать системы сборки, которые будут генерировать фактический make-файл для вас.Это становится важным, когда вы пытаетесь расширить свой проект, и поддержание хорошего файла good может стать сложной задачей.Я предлагаю вам потратить некоторое время на его изучение.Примерами являются Scons, GNU autotools, qmake и Cmake.Я особо рекомендую использовать qmake или Cmake, поскольку они оба кроссплатформенны и просты в освоении.

Другой вариант, который у вас есть, - просто использовать IDE!Лучшая из известных мне c++ IDE для Linux - кроссплатформенная Qt Creator.Под капотом он поддерживает проекты qmake и Cmake.

1 голос
/ 27 марта 2012

Если вы привыкли работать с Visual Studio и вам нужно скомпилировать ваши файлы под Linux, вам не нужно начинать делать все из командной строки;)

Как указывал GradGuy, QtCreator - отличная среда разработки, и я также использую ее для своих сборок, отличных от Windows.Однако, если вы ничего не делаете с GUI, вы можете использовать его вместе с cmake, поскольку Qt в основном относится к GUI.

cmake - генератор файлов решения (например, VS'.sln), который не зависит от того, какую IDE или операционную систему вы используете.Это подход «снизу вверх», когда вам нужно совсем немного, чтобы начать работу.

Вот несколько шагов, с которых можно начать

  • установить qtcreator и cmake
  • напишите файл с указанием cmake, где находятся ваши исходные файлы и где их найти.
  • создайте файл CMakeLists.txt в папке выше src и напишите внутри:

    project( myProject )
    
    # set your include directories (if you have any)
    include_directories( include )
    
    # tell cmake what what are your source files
    set( MY_CPP_FILES 
        src/source1.cpp
        src/source2.cpp
        src/srcfolder1/source11.cpp
        src/srcfolder1/source12.cpp
        src/srcfolder2/source21.cpp
        src/srcfolder2/source22.cpp )
    
    # if you are creating an executable then do so like this
    # note that ${MY_CPP_FILES} will replace it with its content
    add_executable( myExec ${MY_CPP_FILES} )
    
    # if you instead want a library, do it like so
    add_library( myStaticLib STATIC ${MY_CPP_FILES} ) # create a static library
    add_library( mySharedLib SHARED ${MY_CPP_FILES} ) # create a shared library
    
  • теперь запустите QtCreator и выберите File -> Open File or Project и выберите CMakeLists.txt на вашем диске

  • , теперь вам будет предложено выбрать путь, где будут результатысохраняются (а также все промежуточные файлы)
  • удаляются Run CMake
  • и, наконец, выбираются Build -> Build All

Удачи!

0 голосов
/ 16 мая 2019

Пожалуй, самый прямой ответ выглядит примерно так:

g++ $(find src -name '*.cpp')

Тем не менее, имея так много блоков перевода, наличие Makefile помогает значительно сократить время сборки при редактировании исходных файлов и сборке для тестирования.

...