0
我有兩個名稱衝突的來源(autogenerated1.cpp和autogenerated2.cpp)。cmake和部分鏈接來解決符號衝突
我不想修改它們,因爲它們是由第三方工具生成的,所以我使用包裝來隱藏實現。
我想要做這樣的事情上的CMake:
g++ -fvisibility=hidden -c autogenerated1.cpp
g++ -fvisibility=hidden -c autogenerated2.cpp
g++ -c wrapper1.cpp
g++ -c wrapper2.cpp
ld -Ur autogenerated1.o wrapper1.o -o partial1.o
ld -Ur autogenerated2.o wrapper2.o -o partial2.o
objcopy --localize-hidden partial1.o
objcopy --localize-hidden partial2.o
我怎麼能實現與CMake的類似的東西?
TARGET_OBJECT生成器不能用於自定義命令或自定義目標。
而且我無法通過將「objcopy --localize-hidden」應用於目標的輸出共享庫而無需可重定位中間對象來生成工作靜態庫。
我打開其他解決方案來解決符號衝突。
也許只是一個想法,但而不是在編譯生成的文件,你能代替他們包裝在一個命名空間?即'命名空間autogen1 {#包括「autogenerated1.cpp」}'http://stackoverflow.com/questions/232693/including-one-c-source-file-in-another – Lanting
真棒解決方法!它需要在包裝類的相同名稱空間內完成,以避免與wapped標頭衝突。 - 這也是一個跨平臺的解決方案。謝謝! – xvan