2012-03-24 76 views
5

我的C++项目具有以下结构相克编译多个源目录++

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

可以看到有多个源文件的多个文件夹。 我给g ++编译所有源文件到一个.o文件的命令是什么?

+0

呃,给它所有的源文件? – 2012-03-24 10:56:38

+0

大约有100个源文件。太多,无法在命令行提示符中一一列出 – pdeva 2012-03-24 10:57:22

+4

我认为复杂项目中的常见方式是在每个子文件夹中都有Makefile,并从父文件夹调用它们。顺便说一句,为什么你不使用IDE呢? – enobayram 2012-03-24 10:58:26

回答

5

如果你有很多的源文件,你真的应该考虑写一个Makefile: http://mrbook.org/tutorials/make/

比如,你可以使用类似这样的语法来编译多个文件(Makefile文件):

%.o : $(SRC_FOLDER)/%.cpp 
    $(CXX) -c -o [email protected] $< 
+0

罗尔,我的makefile知识现在只是我读的你链接到的那篇文章;)你能解释一下你描述的命令吗? %符号代表什么? – pdeva 2012-03-24 11:08:47

+2

网上必须有更多的教程,它比我在这里可以解释的更好地解释它。基本上上面的内容是:对于SRC_FOLDER中的每个源文件(在别处定义),使用CXX中定义的命令行参数进行编译,并使用标志-c -o将它们命名为与cpp文件相同的名称,但结尾为.o 。另请参阅我上面的编辑 – Rolle 2012-03-24 11:26:10

2

您也可以使用可以为您生成实际生成文件的生成系统。当你尝试扩展你的项目并且维护一个好的时,这变得很重要makefile可能成为一项艰巨的任务。我建议你花一些时间来学习一个。例子是Scons,GNU autotools,qmake和等等。我高度重视使用qmakeCmake,因为它们都是跨平台且易于学习的。

您拥有的另一个选择是简单地使用IDE!在我所知道的并且是跨平台的Linux上,最好的c++ IDE是Qt Creator。在引擎盖下,它支持qmakeCmake项目。

1

如果你习惯于使用Visual Studio的工作,你必须编译linux下的文件,也没有必要开始做在命令行上的一切;)

像GradGuy指出,QtCreator是一个伟大的IDE,我也将它用于我的非Windows版本。但是,如果你不做任何GUI的东西,你可能想与cmake一起使用它,因为Qt主要是关于GUI的。

cmake是解决方案文件(如VS'.sl​​n文件)的生成器,它与您正在运行的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

祝你好运!