編譯文件到指定目錄
Ⅰ 如何指定Makefile編譯目標文件到指定目錄
可以參考Makefile視頻教程:Makefile工程實踐
一步一步從零開始寫項目的Makefile
不僅可以編譯御扒目標文件到指定目錄
源文件、中間生成的臨時文件、頭文件都可以放到指定目錄,這是一個鎮頌昌項目的基本需求櫻首。
Ⅱ Makefile 怎麼把obj文件編譯到某個目錄
目錄結構
Project
- bin
- src [Makefile在這里]
- obj
想要把編譯的目標文件放到obj目錄派指,
因為cl不能指定目標文件輸出路徑,
所以目前採取了一種很蛋疼的方式:
代碼:
bin = "../bin/program.exe"
obj = "../obj"
link_cmd = "TODO:先留著吧"
linkcmd_vc = "TODO:也留著吧"
objects = $(obj)/main.obj
$(bin) : $(objects)
$(CC) -o $(bin) $(objects)
$(obj)/main.obj : main.c
cd ../obj
$(CC) -c ../src/main.c
就是對於每個文件每次手動改變一下工作目錄。
於是為了解決這個問題,擴展的想法是這樣:
1. 找到一個Makefile每次塵毀配make都首先執行的部余山分(就像c中的main.c)
2. 在上述部分中,改變當前工作路徑。
Ⅲ 如何在編譯後,指定安裝路徑
1. 安裝目錄變數
在Makefile中,安裝目錄同樣需要使用變數來指定,這樣就可以很方便的修汪瞎改文件的安裝路徑。安裝目錄的標准命名下邊將一一介紹。這些變數基於標準的文件系統結構,這些變數的變種在SVR4、4.4BSD、Linux、Ultrix v4以及其它現代操作系統中都有使用。
安裝者希望在調用make是改變這些值,(例如 make prefix=/usr install),或者在配置時改變困弊空這些值(例如 configure –prefix=/usr)。GNU包不會對在該系統上這些變數適合於哪些值做任何猜想,或者說GNU包不會猜測這些包應該被安裝到哪裡是更合適的:GNU包使用預設的特定設置是為了以便於所有的GNU包行為一致,它允許安裝者做任何自己想要的布局。
以下所羅列的兩個變數是指定安裝文件的根目錄。所有其它安裝目錄都是它們的子目錄。注意:文件不能直接安裝在這兩個目錄下。
prefix
這個變數(通常作為實際文件安裝目錄的父目錄,可以理解為其它實際文件安裝目錄的前綴)用於構造下列(除這兩個安裝根目錄以外的其它目錄變數)變數的預設值。變數「prefix」預設值是「/usr/local」。創建完整的GNU系統時,變數prefix的預設值是空值,「/usr」是「/」的符號連接符文件。(如果使用「Autoconf」工具,它應該寫成「@prefix@」)。注意:當更改了變數「prefix」以後重新執行「make install」,不會導致可執行程序(終極目標)的重建。
exec_prefix
這個前綴用於構造下列變數的預設值。變數「exec_prefix」預設值是「$(prefix)」(如果使用「Autoconf」工具,它應該寫為「@exec_prefix@」)。通常,「$(exec_prefix)」目錄中的子目錄下存放和機器相關文件(例如可執行文件和常式庫)。「$(prefix)」目錄的子目錄存放通用的一般文件。同樣:改變「exec_prefix」的值之後執行「make install」,不會重建可執行程序(終極目標)。
文件(包括可執行程序、說明文檔等)的安裝目錄:
bindir
用於安裝一般用戶可運行的可執行程序。通常它的值為:「/usr/local/bin」,使用時應寫為:「$(exec_prefix)/bin」。(使用「Autoconf」工具時,應該為「@bindir@」)
sbindir
安裝可在shell中直接調用執行的程序。這些命令僅對系統管理員有用(系統管理工具)。通常它的值為:「/usr/local/sbin」,要求在使用時應寫為:「$(exec_prefix)/sbin」。(使用「Autoconf」工具時,應該為「@sbindir@」)
libexecdir
用於安裝那些通常不是由用戶直接使用,而是由其它程序調用的可執行程序。通常它的值為:「/usr/local/libexec」,要求在使用時應寫為:「$(exec_prefix)/libexec」。(使用「Autoconf」工具時,應該為「@libexecdir@」)
程序執行時使用的數據文件可從以下兩個方面來分類:
1. 是否可由程序更改。分為兩類:程序可修改和不可修改的文件(雖然用戶可編輯其中某些文件)。
2. 是否和體系結構相關。分為兩類:體系結構無關文件,可被所有類型的機器共享;體系結構相關文件,僅可被相同類型機器、操作系統共享;其它的就是那些不能被任何兩個機器共享的文件。
這樣就存在六種不同的可卜含能。除編譯生成的目標文件(.o文件)和庫文件以外,不推薦使用那些和特定機器體系結構相關的文件,使用和體系無關的數據文件更加簡潔,而且,它的實現也並不非常困難。
在Makefile中應該使用以下變數為不同類型的文件指定對應的安裝目錄:
`datarootdir'
The root of the directory tree for read-only architecture-independent data files. This should normally be /usr/local/share, but write it as $(prefix)/share. (If you are using Autoconf, write it as `@datarootdir@'.) `datadir''s default value is based on this variable; so are `infodir', `mandir', and others.
Datarootdir
機器體系結構無關的只讀數據文件的根目錄。通常它的值為:「/usr/local/share」,使用時應寫為:「$(prefix)/share」。(使用「Autoconf」工具時,應該為「@datarootdir@」)。『datadir』的預設值是基於這個變數的,`infodir', `mandir'等其它變數的值也是如此。
datadir
用於安裝和機器體系結構無關的只讀數據文件。通常它的值與』datarootdir』一樣,但是我們使用兩個變數是為了用戶能夠移動一些程序特定的文件而不修改如man 文件、info文件的路徑。通常它的值為:「/usr/local/share」,使用時應寫為:「$(prefix)/share」。(使用「Autoconf」工具時,應該為「@datadir@」)。「$(infodir)」和「$(includedir)」作為例外情況,參考後續對它們的詳細描述。
Datadir的定義對所有包都一樣,因此你應該安裝你的數據在它的子目錄下。大部分包安裝它們的數據在如此目錄下:$(datadir)/package-name/.
sysconfdir
用於安裝從屬於特定機器的只讀數據文件,包括:主機配置文件、郵件服務、網路配置文件、「/etc/passwd」文件等。所有該目錄下的文件都應該是普通文本文件(可識別的「ASCII」碼文本文件)。通常它的值為:「/usr/local/etc」,在使用時應寫為:「$(prefix)/etc」。(使用「Autoconf」工具時,應該為「@sysconfdir@」)。
不要將可執行文件安裝在這個目錄下(可執行文件的安裝目錄應該是「$(libexecdir)」或者「$(sbindir)」)。也不要在這個目錄下安裝那些需要更改的文件(系統的配置文件等)。這些文件應該安裝在目錄「$(localstatedir)」下。
sharedstatedir
用於安裝那些可由程序運行時修改的文件,這些文件與體系結構無關。通常它的值為:「/usr/local/com」,要求在使用時應寫為:「$(prefix)/com」。(使用「Autoconf」工具時,應該為「@sharedstatedir@」)
localstatedir
用於安裝那些可由程序運行時修改的文件,但這些文件和體系結構相關。用戶沒有必要通過直接修改這些文件來配置軟體包,對於不同的配置文件,將它們放在「$(datadir)」或者「$(sysconfdir)」目錄中。「$(localstatedir)」值通常為:「/usr/local/var」,在使用時應寫為:「$(prefix)/var」。(使用「Autoconf」工具時,應該為「@localstatedir@」)
libdir
用於存放編譯後的目標文件(.o)文件庫文件(文檔文件或者執行的共享庫文件)。不要在此目錄下安裝可執行文件(可執行文件應該安裝在目錄「$(libexecdir)」下)。變數libdir值通常為:「/usr/local/lib」,使用時應寫為:「$(exec_prefix)/lib」。(使用「Autoconf」工具時,應該為「@libdir@」)
infodir
用於安裝軟體包的 Info 文件。它的預設值為:「/usr/local/info」,使用時應寫為:「$(prefix)/info」。(使用「Autoconf」工具時,應該為「@infodir@」)
lispdir
用於安裝軟體包的Emacs Lisp 文件的目錄。它的預設值為:「/usr/local/share/emacs/site-lisp」,使用時應寫為:「$(prefix)/share/emacs/site-lisp」。當使用Autoconf工具時,應將寫為「@lispdir@」。為了保證「@lispdir@」能夠正常工作,需要在「configure.in」文件中包含如下部分:
lispdir='${datadir}/emacs/site-lisp'
AC_SUBST(lispdir)
includedir
用於安裝用戶程序源代碼使用「#include」包含的頭文件。它的預設值為:「/usr/local/include」,使用時應寫為:「$(prefix)/include」。(使用「Autoconf」工具時,應該為「@includedir@」)。
除gcc外的大多數編譯器不會在目錄「/usr/local/include」中搜尋頭文件,因此這種方式只適用gcc編譯器。這一點應該不是一個問題,因為很多情況下一些庫需要gcc才能工作。對那些依靠其它編譯器的庫文件,需要將頭文件安裝在兩個地方,一個由變數「includedir」指定,另一個由變數「oldincludedir」指定。
oldincludedir
它所指定的目錄也同樣用於安裝頭文件,這些頭文件用於非gcc的編譯器。它的預設值為:「/usr/include」。(使用「Autoconf」工具時,應該為「@oldincludedir@」)。
Makefile在安裝頭文件時,需要判斷變數「oldincludedir」的值是否為空。如果為空,就不使用它進行頭文件的安裝(一般是安裝完成「/usr/local/include」下的頭文件之後才安裝此目錄下的頭文件)。
一個軟體包的安裝不能替換該目錄下已經存在的頭文件,除非是同一個軟體包(重新使用相同的軟體包在此目錄下安裝頭文件)。例如,軟體包「Foo」需要在「oldincludedir」指定的目錄下安裝一個頭文件「foo.h」時,可安裝的條件為:1.目錄「$(oldincludedir)」目錄下不存在頭文件「foo.h」;2. 已經存在頭文件「foo.h」,存在的頭文件「foo.h」是之前軟體包「Foo」安裝的。
檢查頭文件「foo.h」是否來自於軟體包Foo,需要在頭文件的注釋中包含一個「magic」字元串,使用命令「grep」來在該文件中查找這個magic。
`docdir'
The directory for installing documentation files (other than Info) for this package. By default, it should be /usr/local/share/doc/yourpkg, but it should be written as $(datarootdir)/doc/yourpkg. (If you are using Autoconf, write it as `@docdir@'.) The yourpkg subdirectory, which may include a version number, prevents collisions among files with common names, such as README.
這個目錄安裝除了Info外的該包提供的文檔,它的預設值/usr/local/share/doc/yourpkg,使用時應寫為:「$(datarootdir)/doc/yourpkg」。(使用「Autoconf」工具時,應該為「@docdir@」)。Yourpkg子目錄可能包括版本號,為了阻止具有相同文件名字的文件沖突,例如README。
`infodir'
The directory for installing the Info files for this package. By default, it should be, but it should be written as (If you are using Autoconf, write it as `@infodir@'.) infodir is separate from docdir for compatibility with existing practice.
這個目錄安裝該包的info文件。它的預設值是:/usr/local/share/info, 使用時應寫成:$(datarootdir)/info.(使用「Autoconf」工具時,應該為「@infodir@」).infodir從docdir中單獨分離出來為了兼容已經存在的practice。
`htmldir'
`dvidir'
`pdfdir'
`psdir'
Directories for installing documentation files in the particular format. (It is not required to support documentation in all these formats.) They should all be set to $(docdir) by default. (If you are using Autoconf, write them as `@htmldir@', `@dvidir@', etc.) Packages which supply several translations of their documentation should install them in `$(htmldir)/'ll, `$(pdfdir)/'ll, etc. where ll is a locale abbreviation such as `en' or `pt_BR'.
這些目錄用於安裝特定格式的文檔(並不要求支持所有這些格式的文檔)。預設值應該設置為:$(docdir)(使用「Autoconf」工具時,應該為「@htmldir @」等)。
`libdir'
The directory for object files and libraries of object code. Do not install executables here, they probably ought to go in $(libexecdir) instead. The value of libdir should normally be /usr/local/lib, but write it as $(exec_prefix)/lib. (If you are using Autoconf, write it as `@libdir@'.)
`lispdir'
The directory for installing any Emacs Lisp files in this package. By default, it should be /usr/local/share/emacs/site-lisp, but it should be written as $(datarootdir)/emacs/site-lisp.
If you are using Autoconf, write the default as `@lispdir@'. In order to make `@lispdir@' work, you need the following lines in your configure.in file:
lispdir='${datarootdir}/emacs/site-lisp'
AC_SUBST(lispdir)
`localedir'
The directory for installing locale-specific message catalogs for this package. By default, it should be /usr/local/share/locale, but it should be written as $(datarootdir)/locale. (If you are using Autoconf, write it as `@localedir@'.) This directory usually has a subdirectory per locale.
這個目錄安裝該包用於本地特定消息的目錄。預設值是:/usr/local/share/locale, 但是應該寫成:`@localedir@'。這個目錄常常對每個locale(本地化)都有一個子目錄。
Ⅳ 如何讓VC++ IDE 編譯項目前拷貝一些文件到指定目錄
VC6不行,VC.NET可以,在工程設置裡面設定Pre-build event。另外有個叫FinalBuilder的軟體,功能很強大,用在大型項目Daily Build很有效。
---
1)應該是可以編譯的,VC.NET只有比VC6更加符合標准
2)如果用MAKEFILE的話,還需要去在意那些東東么,你可以任意的使用批處理,想幹啥都行。
Ⅳ c++編譯後那些文件存放到指定文件夾怎麼設置
如果用的是如逗核VC++,我大概說下步驟:
打開菜單項「Projects->Settings」(或按Alt+F7),在General選項卡中的Output Directory框中,有兩項「Intermediate files」和「Output files」,前者是編譯臨時文件的存放目錄,後者是目標程序的存放目錄。都改成「E:\B」就可以了。
------
註:
1,如果用的渣掘是中文版,自己找下對應的項。
2,如果用的是VC2003,VC2005等,菜單項也是類似的。
3,Windows下,目錄層次應指判該寫「\」而不應該寫「/」。
Ⅵ 怎樣讓Eclipse將java文件編譯成class文件到指定的路徑
一,設置單個工程的class文件路徑 右擊工程,BulidPath——Configure Build Path 選擇Source選項卡,在下方的Browse選擇class的目錄OK即可 二:設置全局 打開Window——Preferences 選擇Java——Build Path 修改Output folder name即可
Ⅶ VC中如何設置:編譯後自動將一些文件拷貝到指定目錄
VC 中無法設置該功能。但是可以通過編寫 MAKEFILE 文件,然後使用 make 工具對 MAKEFILE 文件中編寫的具體源程序以及它們之間的相關依賴關系進行編譯,最終來達到將編譯後的碰並一些文件自動攜吵宴拷貝到指辯銀定的子目錄。
Ⅷ 如何設置LiteIDE編譯輸出到特定的目錄
首先,將你要設置超鏈接的文本選擇幾個字,1個2個都可以,然後復制
插入--書簽--把剛才復制的字貼到書簽名,點選下面的位置-添加
然後選中目錄,右擊超鏈接---選本文檔中的位置--出現了你剛才設置的書簽,你選中其中一個,確定,就搞定了。
還不明白的話可以密我
Ⅸ 設置VS將編譯生成的指定後綴的文件放到指定的文件夾中
當系統運行一個程虛塵序而沒有告訴它程序所在的完整路徑時,系統除了在當前目錄下尋找此程序外,還會到Path中指定的路徑去找。
為了將編譯生成的指定後綴的文件,存放到指定的文件夾滲譽配中,在程序運行之初(即程序在調用所需DLL等文件前),將指定的文件夾路徑追加到專用路徑列表中。如此一來,程序在調用相應的DLL等文件時,如果在其它文件中,沒有找到需要的DLL文件時,會自動到剛才新添加到專用路徑中去查找,如果查找不到程序就會出錯。
根據程序的這個特點,可以在項目屬性的「生成事件」中添加相應的命令(對一些宏的利用、環境變數設置及DOS命令的組合),將編叢指譯生成的指定後綴的文件,存放到指定的文件夾中。這樣使程序生成文件的存放整潔。
然後,找到項目「屬性」的「生成事件」中,進行下面的宏、環境變數設置及DOS命令組合處理語句輸入:
Ⅹ 在使用jdk編譯時,如何如何將一個JAVA源文件編譯到一個指定的文件夾裡面
class文件編譯後會存放在d盤根目錄下
javac -d "d:" D.java
執行臨時設置classpath路徑下的class
java -classpath "d:" D