2015-04-12 20 views
1

我有一個C++項目與cmake構建。cmake,我可以從一個可執行對象構建一個庫

add_executable(app foo.cpp bar.cpp main.cpp) 

而且我想在測試項目中使用foo.cppbar.cpp

我知道我可以建立一個庫,然後在這兩個項目鏈接: 像:

add_library(foobar foo.cpp bar.cpp) 

add_executable(app main.cpp) 
target_link_library(app foobar) 

add_executable(test test.cpp) 
target_link_library(test foobar) 

但我寧願不改變應用程序的構建系統和鏈接test針對的對象foo.obar.o

你知道我可以用cmake做到嗎?

+0

標題的意思是說「cmake」? – Carcigenicate

+0

oops,thx,固定! – overlii

+1

您可以再次爲「測試」構建.cpp文件。比試圖重用目標文件更加乾淨。 –

回答

0

序言:你不能鏈接到一個可執行文件,所以你必須改變你創建東西的方式。

評論中提出的一些解決方案是有風險的。不要直接鏈接到目標文件,當你改變任何東西時,你最終會遇到很多痛苦,試圖找到你的目標文件的最終位置,cmake是爲了簡化這種事情,一般的建議是爲您的項目使用正確的體系結構。

提出的解決方案:

  • 只是讓你foobar的庫靜態庫add_library(foobar STATIC foo.cpp bar.cpp),讓你在一開始提出的代碼。
  • 或者,看看sakra提案(object libraries),這很好。
相關問題