簡體   English   中英

在Eclipse中設置構建輸出目錄 - c ++

[英]Set Build output directory in Eclipse - c++

我有一個程序,它包含eclipse中的多個項目(在ubuntu下工作,項目在c ++中),這些項目包括一個主可執行文件,以及其他共享對象文件和靜態庫。

我希望所有這些項目在構建時將其文件輸出到一個公共二進制文件夾,而不是它們各自的調試文件夾。 這是為了使主要可執行文件更容易鏈接。 如果有更好的解決方案,請隨時分享。

不幸的是,我發現除非您正在創建自己的makefile,否則C / C ++ Build選項卡不允許您設置構建位置。

您可能已經發現Project Properties> C / C ++ Build下的Builder Settings選項卡在默認的C / C ++項目中都顯示為灰色。 這是因為CDT默認為新項目指定內部構建器。 要更改此設置,您可以轉到項目屬性> C / C ++構建>工具鏈編輯器 ,並將當前構建 更改為Gnu Make Builder 接下來,轉到Project Properties> C / C ++ Build並將Builder Type更改為External Builder 如果您願意,您現在可以選擇為項目創建自己的makefile; 雖然我建議現在讓CDT自動構建makefile。

我有相同的項目要求輸出到/ project_path / bin(雖然我仍然保持Debug和Release版本之間的分離)。 為此,我在輸出上執行復制操作作為構建后步驟。

為此,請轉到“ 項目屬性”>“C / C ++生成”>“設置”,然后選擇“ 生成步驟”選項卡。 Command:下的Post-build步驟中 ,輸入:

cp ${BuildArtifactFilePrefix}${BuildArtifactFileName} "/path/to/bin/directory/";

顯然,根據需要替換“/ path / to / bin / directory /”。

我個人更喜歡將我的項目文件保存在workspace / build目錄中; 將二進制文件復制到工作空間/ bin目錄,將庫復制到工作 空間/ lib目錄。 起初我發現這個副本的解決方法很不方便,但已經開始欣賞它,因為它將插頁式構建文件與最終的二進制文件/庫隔離開來。

對於二進制文件,我會使用:

cp ${BuildArtifactFilePrefix}${BuildArtifactFileName} "${WorkspaceDirPath}/bin/";

對於圖書館,我會使用:

cp ${BuildArtifactFilePrefix}${BuildArtifactFileName} "${WorkspaceDirPath}/lib/";

我包含變量“$ {BuildArtifactFilePrefix}”,因為CDT包含“lib”作為靜態庫的默認前綴,我實際上更喜歡它。

您只需要在構建之前確保目標目錄存在; Eclipse / CDT不會為您創建目錄。

另外,請記住,這些副本將保留在干凈的/ bin/ lib目錄中,但在任何后續重建時都會被覆蓋。

嘗試Project->Properties

C/C++ Build->Settings您有一個名為Build Artifact的選項卡。

在那里你有Artifact name 默認為${ProjName}

修改此項以指定實際希望最終文件結束的相對目錄路徑。 所以可能是../../lib/${ProjName}

中間文件(.o和.d)仍將構建到子目錄(Debug或Release),但我想如果它們仍在那里會更好,並且它只是最終構建的庫,您要為其更改構建路徑。

如果你發現鍵入這樣的相對路徑不方便,我使用Environment創建環境變量,相對路徑將我帶回“root”。 其中一個是${LIBDIR} ,這是項目構建的相對路徑。 它通常用於鏈接到其他庫中,但也可以用作目標。 然后,您將工件名稱設置為${LIBDIR}/${ProjName} ,如果您使用不同的目錄進行調試和發布構建,則該工作正常。

項目屬性- > C / C ++構建- >設置- > (選項卡)GCC C ++鏈接器

命令行模式顯示在右側

${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${OUTPUT} ${INPUTS}

放在${OUTPUT}前面

${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX} ${ProjDirPath}/bin/${OUTPUT} ${INPUTS}

要么

${COMMAND} ${FLAGS} ${OUTPUT_FLAG}${OUTPUT_PREFIX} MyMainProject/path/bin/ ${INPUTS}

來自https://www.eclipse.org/forums/index.php?t=msg&th=207500&goto=665566&#msg_665566

在我的項目中,構建路徑默認為Build Configuration名稱,因此我可以使用$ {ConfigName}宏來在構建后的步驟中檢索構建路徑:

${workspace_loc:/${ProjName}}/${ConfigName}/${BuildArtifactFileName}

然后,您可以將目標二進制文件復制到公共二進制文件夾,或者在該特定配置的build文件夾中執行其他操作。

剛好正在做一些讓我走上類似道路的事情 - 所以我會把它作為替代解決方案/提醒給自己:

在Eclipse中(至少在Luna中)生成的makefile實際上相當不錯且方便。 我個人喜歡創建幾個構建配置(具有32位和64位架構的發布和調試版本),並使用調試和運行(分別為F5和Execute)配置進行補充。

繼續:我一直在玩Debian上的打包,發現 - 在玩弄的過程中 - 我需要創建並測試安裝目標。 Eclipse既不為您生成,也不提供用於自定義或添加安裝目標的配置接口; 除了可以指定另一個目標存在的地方之外。

所以從技術上講Eclipse確實提供了一個接口; 有點兒。 因此,我偶然發現了makefile.initmakefile.defsmakefile.targets文件。

過程/工作流:

  • 在eclipse項目的根目錄中創建一個文件makefile.targets ; 在所述文件中手動定義安裝目標。 當然,這允許您根據需要指定每個小細節,但Eclipse提供的所有配置的附加好處已經完成並可供您用於定義指定目標的規則。

  • makefile.targets文件中定義新目標后, 右鍵單擊 Eclipse project explorer項目的名稱或主cpp文件,然后選擇Make Targets - > Build... ,最后Add以實例化彈出窗口。 或者,您可以在最后一步選擇“創建”而不是“構建”,它將提供下一部分所需的相同彈出窗口。 添加新目標的名稱 - 將其他所有內容保留為默認值 - 單擊“ ok

  • 如果您選擇通過右鍵單擊 Project Explorer並選擇Make Target - > Build ...來 添加新的make目標,則在添加新的make目標后,您將返回到選擇Build所產生的第一個彈出窗口。 .. 否則,現在就可以找到Make Targets - > Build..彈出窗口。 選擇所需的目標,然后單擊Build

查看Eclipse的自動生成的makefile是學習makefile語法和整體結構的一種很好的方法,並進入包含和條件的一些高級用法。

以下是一個示例makefile的一些部分,至少我希望它將演示手動設置構建的輸出目錄:

prefix = /usr/local
bindir = $(prefix)/bin
sharedir = $(prefix)/share
mandir = $(sharedir)/man
man1dir = $(mandir)/man1

...
# Typical all target
all: <binaryname>

#Typical clean target
clean:
rm -f <binaryname> <objectname>.o

# Target invokes all, then installs to specified locations
install: all
install <binaryname> $(DESTDIR)$(bindir)
install -m 0644 <objectname>.1 $(DESTDIR)$(man1dir)

如果打開項目的屬性,則有一個選項卡C / C ++ Build。 這有一個構建位置選項,您可以在其中指定構建目錄。 您似乎可以為多個項目更改此項,以便它們共享相同的構建目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM