Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 16 kết quả

Đề tài: Biên dịch source code c/c++ bằng Command Line

  1. #1
    Ngày gia nhập
    09 2016
    Bài viết
    1,028

    Mặc định Biên dịch source code c/c++ bằng Command Line

    Trong nhiều trường hợp chúng ta có thể biên dịch mà không cần phải mở IDE

    Đây là các opts của cl.exe - trình biên dịch vc
    Dos Code:
    1. F:\_Abc_>cl /?
    2. Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
    3. Copyright (C) Microsoft Corporation.  All rights reserved.
    4.  
    5.                          C/C++ COMPILER OPTIONS
    6.                               -OPTIMIZATION-
    7.  
    8. /O1 minimize space                      /O2 maximize speed
    9. /Ob<n> inline expansion (default n=0)   /Od disable optimizations (default)
    10. /Og enable global optimization          /Oi[-] enable intrinsic functions
    11. /Os favor code space                    /Ot favor code speed
    12. /Ox maximum optimizations               /Oy[-] enable frame pointer omission
    13.  
    14.                              -CODE GENERATION-
    15.  
    16. /GF enable read-only string pooling     /Gm[-] enable minimal rebuild
    17. /Gy[-] separate functions for linker    /GS[-] enable security checks
    18. /GR[-] enable C++ RTTI                  /GX[-] enable C++ EH (same as /EHsc)
    19. /EHs enable C++ EH (no SEH exceptions)  /EHa enable C++ EH (w/ SEH exceptions)
    20. /EHc extern "C" defaults to nothrow
    21. /fp:<except[-]|fast|precise|strict> choose floating-point model:
    22.     except[-] - consider floating-point exceptions when generating code
    23.     fast - "fast" floating-point model; results are less predictable
    24. (press <return> to continue)
    25.     precise - "precise" floating-point model; results are predictable
    26.     strict - "strict" floating-point model (implies /fp:except)
    27. /Qfast_transcendentals generate inline FP intrinsics even with /fp:except
    28. /GL[-] enable link-time code generation /GA optimize for Windows Application
    29. /Ge force stack checking for all funcs  /Gs[num] control stack checking calls
    30. /Gh enable _penter function call        /GH enable _pexit function call
    31. /GT generate fiber-safe TLS accesses    /RTC1 Enable fast checks (/RTCsu)
    32. /RTCc Convert to smaller type checks    /RTCs Stack Frame runtime checking
    33. /RTCu Uninitialized local usage checks
    34. /clr[:option] compile for common language runtime, where option is:
    35.     pure - produce IL-only output file (no native executable code)
    36.     safe - produce IL-only verifiable output file
    37.     oldSyntax - accept the Managed Extensions syntax from Visual C++ 2002/2003
    38.     initialAppDomain - enable initial AppDomain behavior of Visual C++ 2002
    39.     noAssembly - do not produce an assembly
    40. /Gd __cdecl calling convention          /Gr __fastcall calling convention
    41. /Gz __stdcall calling convention        /GZ Enable stack checks (/RTCs)
    42. /QIfist[-] use FIST instead of ftol()
    43. /hotpatch ensure function padding for hotpatchable images
    44. /arch:<SSE|SSE2|AVX> minimum CPU architecture requirements, one of:
    45.     SSE - enable use of instructions available with SSE enabled CPUs
    46.     SSE2 - enable use of instructions available with SSE2 enabled CPUs
    47.     AVX - enable use of Intel(R) Advanced Vector Extensions instructions
    48. /Qimprecise_fwaits generate FWAITs only on "try" boundaries, not inside "try"
    49. (press <return> to continue)
    50. /Qsafe_fp_loads generate safe FP loads
    51.  
    52.                               -OUTPUT FILES-
    53.  
    54. /Fa[file] name assembly listing file    /FA[scu] configure assembly listing
    55. /Fd[file] name .PDB file                /Fe<file> name executable file
    56. /Fm[file] name map file                 /Fo<file> name object file
    57. /Fp<file> name precompiled header file  /Fr[file] name source browser file
    58. /FR[file] name extended .SBR file       /Fi[file] name preprocessed file
    59. /doc[file] process XML documentation comments and optionally name the .xdc file
    60.  
    61.                               -PREPROCESSOR-
    62.  
    63. /AI<dir> add to assembly search path    /FU<file> forced using assembly/module
    64. /C don't strip comments                 /D<name>{=|#}<text> define macro
    65. /E preprocess to stdout                 /EP preprocess to stdout, no #line
    66. /P preprocess to file                   /Fx merge injected code to file
    67. /FI<file> name forced include file      /U<name> remove predefined macro
    68. /u remove all predefined macros         /I<dir> add to include search path
    69. /X ignore "standard places"
    70.  
    71.                                 -LANGUAGE-
    72.  
    73. /Zi enable debugging information        /Z7 enable old-style debug info
    74. (press <return> to continue)
    75. /Zp[n] pack structs on n-byte boundary  /Za disable extensions
    76. /Ze enable extensions (default)         /Zl omit default library name in .OBJ
    77. /Zg generate function prototypes        /Zs syntax check only
    78. /vd{0|1|2} disable/enable vtordisp      /vm<x> type of pointers to members
    79. /Zc:arg1[,arg2] C++ language conformance, where arguments can be:
    80.     forScope[-] - enforce Standard C++ for scoping rules
    81.     wchar_t[-] - wchar_t is the native type, not a typedef
    82.     auto[-] - enforce the new Standard C++ meaning for auto
    83.     trigraphs[-] - enable trigraphs (off by default)
    84. /ZI enable Edit and Continue debug info
    85. /openmp enable OpenMP 2.0 language extensions
    86.  
    87.                               -MISCELLANEOUS-
    88.  
    89. @<file> options response file           /?, /help print this help message
    90. /bigobj generate extended object format /c compile only, no link
    91. /errorReport:option Report internal compiler errors to Microsoft
    92.     none - do not send report
    93.     prompt - prompt to immediately send report
    94.     queue - at next admin logon, prompt to send report (default)
    95.     send - send report automatically
    96. /FC use full pathnames in diagnostics   /H<num> max external name length
    97. /J default char type is unsigned
    98. /MP[n] use up to 'n' processes for compilation
    99. (press <return> to continue)
    100. /nologo suppress copyright message      /showIncludes show include file names
    101. /Tc<source file> compile file as .c     /Tp<source file> compile file as .cpp
    102. /TC compile all files as .c             /TP compile all files as .cpp
    103. /V<string> set version string           /w disable all warnings
    104. /wd<n> disable warning n                /we<n> treat warning n as an error
    105. /wo<n> issue warning n once             /w<l><n> set warning level 1-4 for n
    106. /W<n> set warning level (default n=1)   /Wall enable all warnings
    107. /WL enable one line diagnostics         /WX treat warnings as errors
    108. /Yc[file] create .PCH file              /Yd put debug info in every .OBJ
    109. /Yl[sym] inject .PCH ref for debug lib  /Yu[file] use .PCH file
    110. /Y- disable all PCH options             /Zm<n> max memory alloc (% of default)
    111. /Wp64 enable 64 bit porting warnings
    112.  
    113.                                 -LINKING-
    114.  
    115. /LD Create .DLL                         /LDd Create .DLL debug library
    116. /LN Create a .netmodule                 /F<num> set stack size
    117. /link [linker options and libraries]    /MD link with MSVCRT.LIB
    118. /MT link with LIBCMT.LIB                /MDd link with MSVCRTD.LIB debug lib
    119. /MTd link with LIBCMTD.LIB debug lib
    120.  
    121.                          -CODE ANALYSIS-
    122.  
    123. /analyze[:WX-] enable code analysis
    124.     WX- - code analysis warnings should not be treated as errors even if /WX is invoked
    125. (press <return> to continue)

    Cũng vậy, có thể editor / viết lại vcxproj theo như bạn muốn.

    Cách khác là dùng makefile, nMake

    Xem thêm:
    http://diendan.congdongcviet.com/threads/t378322::build-make-file.cpp

    Mại dzô thảo luận
    Phọt mô xa 2016

  2. #2
    Ngày gia nhập
    09 2016
    Bài viết
    1,028

    Ví dụ 01:

    C Code:
    1. #include <stdio.h>
    2.  
    3. char format[] = "%s %s\n";
    4. char hello[] = "Hello";
    5. char world[] = "world";
    6.  
    7. int main(){
    8.    //printf("%s %s\n", hello, world);
    9.    __asm{
    10.       mov  eax, offset world
    11.       push eax
    12.       mov  eax, offset hello
    13.       push eax
    14.       mov  eax, offset format
    15.       push eax
    16.       call printf
    17.       //use the unused register ebx to do the cleanup
    18.       pop  ebx
    19.       pop  ebx
    20.       pop  ebx
    21.    }
    22. }

    Biên dịch:
    Batch Code:
    1. path=E:\program files\Microsoft Visual Studio 10.0\VC\bin;%path%
    2. call vcvars32.bat
    3. cl asm2.cpp

    kết quả
    OutCmd Code:
    1.  
    2. F:\_Abc_\Trig>cl asm2.cpp
    3. Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86
    4. Copyright (C) Microsoft Corporation.  All rights reserved.
    5.  
    6. asm2.cpp
    7. Microsoft (R) Incremental Linker Version 10.00.30319.01
    8. Copyright (C) Microsoft Corporation.  All rights reserved.
    9.  
    10. /out:asm2.exe
    11. asm2.obj
    12.  
    13. F:\_Abc_\Trig>asm2
    14. Hello world
    15.  
    16. F:\_Abc_\Trig>

  3. #3
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    843

    Trong các đoạn lệnh khác nhau - giữa các khối, khi sử dụng tới ASM, để tránh phá hỏng dữ liệu trước đó, thường thì chúng ta phải cất tất cả các thanh ghi kể cả thanh ghi cờ

    ; pushad
    ; pushfd
    ;;;;;;; Sử dụng thanh ghi
    ;;;;;;;;; Phục hồi
    ; popfd
    ; popad

    Tiếc rằng congdongcviet không có box cho ASM, có box này có thể nhiều bạn tham gia.

  4. #4
    Ngày gia nhập
    09 2016
    Bài viết
    1,028

    Tôi đồng ý với bác về vấn đề này : congdongcviet không có box cho ASM, cho MsIL, cho pascal, ...

    Asm là ngôn ngữ khó viết thành CT lớn, nhưng c/c++ và pascal/delphi cho phép nhúng asm để viết những khối cần tốc độ cao. Là người viết code thì biết asm, viết được asm là ưu thế nổi trội.

    Bác có đồng thuận cho viết code nho nhỏ demo, minh hoạ bằng Assembly chứ ?

  5. #5
    Ngày gia nhập
    09 2016
    Bài viết
    1,028

    Lúc khác chơi Assembly, chờ bác Mod duyệt đã, giờ nói tiếp c/c++

    Ví dụ 02: tạo DLL cho CT khác sử dụng

    C Code:
    1. #define EPSILON 0.0000001
    2. //#define mAbs(x) x>0?x:-x
    3.  
    4. extern "C" __declspec(dllexport)
    5. double sinCalc(const double x){
    6.     int k = 1;
    7.     double kq = x, P = x; //P(0)
    8.  
    9.     do{
    10.         P *= -x*x/(2*k)/(2*k+1); //P(k) = P(k-1)* df(k)
    11.         kq += P; //Sin(k) = Sin(k-1) + P(k)    
    12.         k++;
    13.     }
    14.     while(P > EPSILON);
    15.     //while(mAbs(P) > EPSILON);
    16.     return kq;
    17. }
    biên dịch, chưa cần min-size, từ từ bàn tiếp:
    CL.exe /LD /O2 /Oi fnCalc.cpp
    nó sinh fnCalc.DLL và fnCalc.LIB (dùng cho biên dịch c/c++)

    a/ dùng cho vc app:
    C++ Code:
    1. #include <stdio.h>
    2.  
    3. extern "C"{
    4.     __declspec(dllimport) double sinCalc(const double x);
    5. }
    6.  
    7. int main(){
    8.     double x;  
    9.     printf("Calc sin(x), x = "); scanf("%lf", &x);
    10.     //printf("x= %f\n", x);
    11.    
    12.     printf("sin(x) = %f", sinCalc(x));
    13.     return 0;
    14. }
    biên dịch:
    cl.exe /O2 /Oi vc_Test.cpp /link fnCalc.lib

    b/ dùng cho cs:
    Visual C# Code:
    1. using System;
    2. using System.Runtime.InteropServices;     // DLL support
    3.  
    4. class cs_call_cDll{
    5.     [DllImport("fnCalc.dll")]
    6.     //public
    7.     static extern double sinCalc(double x);
    8.  
    9.     static void Main(){
    10.         Console.WriteLine("This is C# program");
    11.         //
    12.         Console.Write("then call sin(x), x = ");
    13.         double x = double.Parse(Console.ReadLine());
    14.         //
    15.         Console.WriteLine("sin(x) = {0}", sinCalc(x));
    16.     }
    17. }

    biên dịch :
    csc cs_test.cs

    c/ ... ngôn ngữ khác ...

    Phọt mô xa 2016

  6. #6
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    843

    Mặc định Biên dịch source code c/c++ bằng Command Line

    "Lúc khác chơi Assembly, chờ bác Mod duyệt đã, giờ nói tiếp c/c++"...

    Hầy, tôi không có quyền đó, nhưng theo ý riêng thì các box họ c/c++ là gần gũi với asm mà bác nêu hơn các box khác, ..., ...

  7. #7
    Ngày gia nhập
    09 2016
    Bài viết
    1,028

    Tôi sẽ trình bày phần Assembly ở topic Hợp ngữ & Inline assembler,
    link :
    http://diendan.congdongcviet.com/threads/t381342::hop-ngu-inline-assembler.cpp

    - nó giới hạn nhúng Assembly trong c/c++ hoặc pascal/delphi,
    - tôi không viết nổi một ứng dụng toàn bằng hợp ngữ, không viết được nó từ notepad++, tôi dùng TBD convert c sang asm thôi.

    Mong các thành viên diễn đàn hưởng ứng, nó là cách giải trí lành mạnh vừa ôn lại kiến thức, không bổ ngang cũng té ngửa.

  8. #8
    Ngày gia nhập
    09 2016
    Bài viết
    1,028

    Trích dẫn Nguyên bản được gửi bởi fms17 Xem bài viết
    Lúc khác chơi Assembly, chờ bác Mod duyệt đã, giờ nói tiếp c/c++

    Ví dụ 02: tạo DLL cho CT khác sử dụng

    C Code:
    1. #define EPSILON 0.0000001
    2. //#define mAbs(x) x>0?x:-x
    3.  
    4. extern "C" __declspec(dllexport)
    5. double sinCalc(const double x){
    6.     int k = 1;
    7.     double kq = x, P = x; //P(0)
    8.  
    9.     do{
    10.         P *= -x*x/(2*k)/(2*k+1); //P(k) = P(k-1)* df(k)
    11.         kq += P; //Sin(k) = Sin(k-1) + P(k)    
    12.         k++;
    13.     }
    14.     while(P > EPSILON);
    15.     //while(mAbs(P) > EPSILON);
    16.     return kq;
    17. }
    ....
    Nó có lỗi tính toán - có thể là cố ý - vui lòng sửa lại :

    C Code:
    1. #define EPSILON 0.0000001
    2. //#define mAbs(x) x>0?x:-x
    3.  
    4. extern "C" __declspec(dllexport)
    5. double sinCalc(const double x){
    6.     int k = 1;
    7.     double kq = x, P = x; //P(0)
    8.  
    9.     do{
    10.         P *= -x*x/(2*k)/(2*k+1); //P(k) = P(k-1)* df(k)
    11.         kq += P; //Sin(k) = Sin(k-1) + P(k)    
    12.         k++;
    13.     }
    14.     while((P>0 ? P : -P) > EPSILON);
    15.     //while(mAbs(P) > EPSILON);
    16.     return kq;
    17. }

    Xem thêm - diễn giải :
    http://diendan.congdongcviet.com/threads/t381045::ham-sin-math-h-tinh-nhu-the-nao.cpp
    hoặc:
    http://diendan.congdongcviet.com/threads/t381342::hop-ngu-inline-assembler.cpp?p=882248#post882248

    Phọt mô xa 2116

  9. #9
    Ngày gia nhập
    09 2016
    Bài viết
    1,028

    Đây là msBuild.exe
    Sử dụng :

    Cmd Code:
    1. F:\_Abc_>msBuild /?
    2. Microsoft (R) Build Engine Version 2.0.50727.5420
    3. [Microsoft .NET Framework, Version 2.0.50727.5420]
    4. Copyright (C) Microsoft Corporation 2005. All rights reserved.
    5.  
    6. Syntax:              MSBuild.exe [options] [project file]
    7.  
    8. Description:         Builds the specified targets in the project file. If
    9.                      a project file is not specified, MSBuild searches the
    10.                      current working directory for a file that has a file
    11.                      extension that ends in "proj" and uses that file.
    12.  
    13. Switches:
    14.  
    15.   /help              Display this usage message. (Short form: /? or /h)
    16.  
    17.   /nologo            Do not display the startup banner and copyright message.
    18.  
    19.   /version           Display version information only. (Short form: /ver)
    20.  
    21.   @<file>            Insert command-line settings from a text file. To specify
    22.                      multiple response files, specify each response file
    23.                      separately.
    24.  
    25.   /noautoresponse    Do not auto-include the MSBuild.rsp file. (Short form:
    26.                      /noautorsp)
    27.  
    28.   /target:<targets>  Build these targets in this project. Use a semicolon or a
    29.                      comma to separate multiple targets, or specify each
    30.                      target separately. (Short form: /t)
    31.                      Example:
    32.                        /target:Resources;Compile
    33.  
    34.   /property:<n>=<v>  Set or override these project-level properties. <n> is
    35.                      the property name, and <v> is the property value. Use a
    36.                      semicolon or a comma to separate multiple properties, or
    37.                      specify each property separately. (Short form: /p)
    38.                      Example:
    39.                        /property:WarningLevel=2;OutDir=bin\Debug\
    40.  
    41.   /logger:<logger>   Use this logger to log events from MSBuild. To specify
    42.                      multiple loggers, specify each logger separately.
    43.                      The <logger> syntax is:
    44.                         [<logger class>,]<logger assembly>[;<logger parameters>]
    45.                      The <logger class> syntax is:
    46.                         [<partial or full namespace>.]<logger class name>
    47.                      The <logger assembly> syntax is:
    48.                         {<assembly name>[,<strong name>] | <assembly file>}
    49.                      The <logger parameters> are optional, and are passed
    50.                      to the logger exactly as you typed them. (Short form: /l)
    51.                      Examples:
    52.                        /logger:XMLLogger,MyLogger,Version=1.0.2,Culture=neutral
    53.                        /logger:XMLLogger,C:\Loggers\MyLogger.dll;OutputAsHTML
    54.  
    55.   /verbosity:<level> Display this amount of information in the event log.
    56.                      The available verbosity levels are: q[uiet], m[inimal],
    57.                      n[ormal], d[etailed], and diag[nostic]. (Short form: /v)
    58.                      Example:
    59.                        /verbosity:quiet
    60.  
    61.   /consoleloggerparameters:<parameters>
    62.                      Parameters to console logger. (Short form: /clp)
    63.                      The available parameters are:
    64.                         PerformanceSummary--show time spent in tasks, targets
    65.                             and projects.
    66.                         NoSummary--don't show error and warning summary at the
    67.                             end.
    68.                         NoItemAndPropertyList--don't show list of items and
    69.                             properties at the start of each project build.
    70.                      Example:
    71.                         /consoleloggerparameters:PerformanceSummary;NoSummary
    72.  
    73.   /noconsolelogger   Disable the default console logger and do not log events
    74.                      to the console. (Short form: /noconlog)
    75.  
    76.   /validate          Validate the project against the default schema. (Short
    77.                      form: /val)
    78.  
    79.   /validate:<schema> Validate the project against the specified schema. (Short
    80.                      form: /val)
    81.                      Example:
    82.                        /validate:MyExtendedBuildSchema.xsd
    83.  
    84. Examples:
    85.  
    86.         MSBuild MyApp.sln /t:Rebuild /p:Configuration=Release
    87.         MSBuild MyApp.csproj /t:Clean /p:Configuration=Debug

    Phọt mô xa 2016

  10. #10
    Ngày gia nhập
    02 2014
    Nơi ở
    TP.HCM
    Bài viết
    843

    Có bạn nào còn nhớ khác nhau trong phần chuyển giao tham số vào hàm giữa C và Pascal không nhỉ - cái nào thuận cái nào nghịch đã quên mất rồi. Ý mình là để lấy tham số ra theo dạng asm [BP+offset] ấy, cám ơn các bạn nhắc bài.

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn