输出目录文件被多个中间文件输出目录相同的工程包含
時光緊張,先記一筆,后續優化與完善。
????
????case:
????
????兩個工程Proj1和Proj2,同時包括demo.cpp,其中Proj1在工程配置里預定義宏MACRO_PROJ1,Proj2在工程配置里預定義宏MACRO_PROJ2,兩個工程的旁邊文件輸出目錄為同一個,文件demo.cpp內容如下:
#include <stdio.h> int main() { #ifdef MACRO_PROJ1 printf("output by proj1"); #elif defined MACRO_PROJ2 printf("output by proj2"); #endif return 0; }????然后編譯兩工程生成Proj1.exe和Proj2.exe,期望的結果是Proj1.exe輸出output by proj1,Proj2輸出output by proj2,但是……意外產生了:
每日一道理雖然你現在還只是一株稚嫩的幼苗。然而只要堅韌不拔,終會成為參天大樹;雖然你現在只是涓涓細流,然而只要鍥而不舍,終會擁抱大海;雖然你現在只是一只雛鷹,然而只要心存高遠,跌幾個跟頭之后,終會占有藍天。
????會發現一定的概率下,兩個exe輸出的內容相同,至于是output by proj1還是output by proj2則比較隨機。
????
????analysis:
????
????在出問題的情況下,既然Proj1.exe和Proj2.exe輸出一致,那么可以推測生成兩個exe的源旁邊文件demo.obj是一樣的,明顯在兩個工程里根據宏定義,預編譯當時的源代碼是不一樣的,怎么會出現生成的obj文件一樣的情況呢?聯想到編譯器的“懶惰”特性,推測出產生問題的情況如下:
????假設首先編譯Proj1,那么預編譯當時,源文件里失效的應該是printf("output by proj1");這一行,生成demo.obj,然后鏈接生成Proj1.exe;然后在編譯Proj2時,編譯器會先比較demo.cpp和demo.obj的時光戳,發現demo.obj的修改時光比較新,那么就不必重新編譯,就將之前生成的demo.obj直接用于鏈接生成了Proj2.exe。
????
????confirmation:
????
????變動Proj1與Proj2兩個工程的旁邊文件輸出目錄為兩個不同的目錄,問題不再產生。?
????Done!
文章結束給大家分享下程序員的一些笑話語錄: 系統程序員
   1、頭皮經常發麻,在看見一個藍色屏幕的時候比較明顯,在屏幕上什幺都看不見的時候尤其明顯;
   2、乘電梯的時候總擔心死機,并且在墻上找reset鍵;
   3、指甲特別長,因為按F7到F12比較省力;
   4、只要手里有東西,就不停地按,以為是Alt-F、S;
   5、機箱從來不上蓋子,以便判斷硬盤是否在轉;
   6、經常莫名其妙地跟蹤別人,手里不停按F10;
   7、所有的接口都插上了硬盤,因此覺得26個字母不夠;
   8、一有空就念叨“下輩子不做程序員了”;
   9、總是覺得9號以后是a號;
   10、不怕病毒,但是很害怕自己的程序;
 --------------------------------- 原創文章 By 
輸出和目錄
--------------------------------- 
總結
以上是生活随笔為你收集整理的输出目录文件被多个中间文件输出目录相同的工程包含的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 携手五年 华为与围甲的羁绊不止于科技
 - 下一篇: 苹果屏幕上的小圆点怎么设置