2016-09-22 135 views
0

我正在使用Linux,CMake和Conda,它是一個包管理器,它編輯$PATH作爲在「環境」之間切換的一種方式。這意味着當我在Conda中運行一個特殊命令時,$PATH指向一個不同的編譯器。 $CONDA_PREFIX也改變了。CMake:當環境變量發生變化時觸發Makefiles的再生

默認情況下,CMake對這些更改不敏感。我希望它是。具體來說,我希望CMake在$PATH中找到不同的GCC時自動重新生成所有Makefile,或者自上次顯式cmake調用以來$CONDA_PREFIX已更改。這種再生將類似於當您編輯頂級CMakeLists.txt文件時CMake所做的事情 - 下次運行make時,它會重新生成所有內容。

如何使用CMake以簡單的方式執行此操作?

+0

自然的方法似乎爲每個額外的「環境」創建新的構建樹。 – Tsyvarev

+0

@Tsyvarev:我明白你的意思,但這並不能解決問題 - 如果用戶意外地在錯誤的(不匹配的)Conda環境與CMake構建樹中,構建可能有缺陷。我試圖確保構建永遠不匹配。 –

+0

您可以添加目標(通過'add_custom_target'),它會檢查構建樹是否與當前環境相對應。對於不匹配的構建,目標可能會因適當的消息而失敗。如果您需要*部分重新配置,則強制CMake重新運行(請參閱,例如[該郵件](http://public.kitware.com/pipermail/cmake/2010-November/040777.html))可能會有用。但是,當編譯器發生變化時,您可能需要放棄所有與編譯器相關的緩存,這實際上是一個乾淨的配置(乾淨的構建目錄中的'cmake'調用)。 – Tsyvarev

回答

0

總之,生成的構建目錄不應該依賴於環境。

如果用戶不小心在錯誤(不匹配)的Conda環境與CMake構建樹中,構建可能有缺陷。

如果您使用find_program()命令來確定您正在使用的所有工具的路徑,那麼這絕不會發生。爲每個工具使用完整路徑併爲每個環境設置使用構建目錄是處理此問題的首選方法。

相關問題